PHP für Anfänger: Einen einfachen CRM von Grund auf neu aufbauen

Avatar of Richard Chen
Richard Chen am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Customer Relationship Management (CRM) ist ein System, das Kundeninteraktionen und -daten während des gesamten Kundenlebenszyklus zwischen dem Kunden und dem Unternehmen über verschiedene Kanäle hinweg verwaltet. In diesem Tutorial erstellen wir ein benutzerdefiniertes CRM in PHP, das ein Vertriebsteam nutzen kann, um Kunden während des gesamten Verkaufszyklus zu verfolgen.

Wir erstellen ein einfaches CRM-System für Verkäufer, damit diese

  • Zugriff auf ihre Aufgaben haben
  • Ihre Leads einsehen können
  • Neue Aufgaben für jeden Lead erstellen können
  • Neue Verkaufschancen anlegen können
  • Einen Verkauf verlieren können

Vertriebsmanager können

  • Alle Kunden verwalten
  • Das Vertriebsteam verwalten
  • Aktuelle Vertriebsaktivitäten einsehen

Demo-Dateien herunterladen

Bausteine eines CRM

Hier ist eine Liste der wesentlichen Komponenten des CRM

  • Leads: Erste Kontakte
  • Accounts: Informationen über die Unternehmen, mit denen Sie Geschäfte machen
  • Kontakt: Informationen über die Personen, die Sie kennen und mit denen Sie arbeiten. Normalerweise hat ein Account viele Kontakte
  • Opportunities: Qualifizierte Leads
  • Aktivitäten: Aufgaben, Besprechungen, Anrufe, E-Mails und alle anderen Aktivitäten, die Ihnen die Interaktion mit Kunden ermöglichen
  • Sales: Ihr Vertriebsteam
  • Dashboard: CRM-Dashboards sind viel mehr als nur hübsche Optik. Sie sollten wichtige Informationen auf einen Blick liefern und Links für detailliertere Einblicke bieten.
  • Login: Verkäufer und Manager haben unterschiedliche Rollen im System. Manager haben Zugriff auf Berichte und Informationen zur Vertriebspipeline.
Übersicht des Verkaufsprozesses

Systemanforderungen

  • PHP 5.3+,
  • MySQL oder MariaDB
  • phpGrid

CRM-Datenbank erstellen

Wir beginnen mit der Erstellung unserer benutzerdefinierten CRM-Datenbank. Die Haupttabellen, die wir verwenden werden, sind

  • contact – enthält grundlegende Kundendaten
  • notes – enthält Informationen, die von Vertriebsmitarbeitern beim Kontakt gesammelt wurden.
  • users – Informationen über Vertriebsmitarbeiter
Hauptdatenbanktabellen

Die Tabelle contact enthält grundlegende Kundeninformationen wie Namen, Firmenadressen, Projektinformationen usw.

Die Tabelle notes wird verwendet, um alle Vertriebsaktivitätsinformationen wie Besprechungen und Anrufe zu speichern.

Die Tabelle users speichert Anmeldeinformationen über Benutzer des Systems, wie Benutzernamen und Passwörter. Benutzer können auch Rollen haben, entweder Sales oder Manager.

Alle anderen Tabellen sind einfache Lookup-Tabellen, die mit den oben genannten drei Hauptrelationenbanktabellen verknüpft werden.

  • contact_status – enthält Kontaktstatus wie Lead und Opportunity, die jeweils eine andere Phase in einem typischen Verkaufszyklus anzeigen
  • task_status – der Aufgabenstatus kann entweder Pending oder Completed sein
  • user_status – ein Vertriebsmitarbeiter kann Active oder Inactive sein
  • todo_type – eine Art von Aufgabe, entweder Task oder Meeting
  • todo_desc – Beschreibung einer Aufgabe wie Follow Up Email, Phone Call, Conference usw.
  • roles – ein Benutzer kann entweder Sales Rep oder Manager sein

Vollständiges Datenbankschema-Diagramm

Ein Datenbankschema ist die Struktur, die die logische Ansicht (Tabellen, Ansichten, Primär- und Fremdschlüssel) der gesamten Datenbank darstellt. Ein Datenbankschema umfasst Entitäten und die Beziehungen zwischen ihnen.

Es ist eine gute Praxis, für jede Tabelle in einer relationalen Datenbank einen Primärschlüssel zu haben. Ein Primärschlüssel ist ein eindeutiger Identifikator für jeden Datensatz. Es kann die Sozialversicherungsnummer (SSN), die Fahrzeugidentifikationsnummer (VIN) oder einfach eine automatisch inkrementierende Zahl sein (eine eindeutige Nummer, die generiert wird, wenn ein neuer Datensatz in eine Tabelle eingefügt wird).

Unten sehen Sie das Datenbankdiagramm unseres einfachen CRM. Das Schlüsselsymbol in jeder Tabelle stellt den Primärschlüssel der Tabelle dar. Die Lupe zeigt den Fremdschlüssel an, der eine andere Tabelle in der Datenbank verknüpft. Manchmal nennen wir sie die „Lookup“-Tabelle.

install.sql

Sobald Sie die Struktur der Datenbanktabellen verstanden haben, finden Sie das Skript install.sql im db-Ordner und verwenden Sie ein MySQL-Tool wie MySQL Workbench oder Sequel Pro, um das SQL-Skript auszuführen. Es sollte eine neue relationale Datenbank namens custom_crm und ihre Datenbanktabellen erstellen.

phpGrid einrichten

Unser einfaches CRM enthält viele Datagrids. Das Datagrid ist eine Tabellenkalkulations-ähnliche Datentabelle, die Zeilen und Spalten anzeigt, die Datensätze und Felder aus der Datenbanktabelle darstellen. Das Datagrid gibt dem Endbenutzer die Möglichkeit, Datenbanktabellen auf einer Webseite zu lesen und zu schreiben.

Wir entscheiden uns für ein Datagrid-Tool von phpGrid, um das Datagrid zu erstellen. Der Grund für die Verwendung eines Tools anstelle des Erstellens von Grund auf ist, dass die Entwicklung des Datagrids normalerweise extrem mühsam und fehleranfällig ist. Die Datagrid-Bibliothek kümmert sich mit wenig Code um alle internen CRUD-Operationen (Create, Remove, Update, Delete) der Datenbank für uns, mit besseren und schnelleren Ergebnissen.

Um phpGrid zu installieren, befolgen Sie diese Schritte

  1. Entpacken Sie die heruntergeladene phpGrid-Datei
  2. Laden Sie den phpGrid-Ordner in den Ordner `phpGrid` hoch
  3. Schließen Sie die Installation ab, indem Sie die Datei `conf.php` konfigurieren

Bevor wir mit dem Codieren beginnen, müssen wir die Datenbankinformationen in conf.php, der phpGrid-Konfigurationsdatei, angeben. Hier ist ein Beispiel für Datenbankverbindungseinstellungen

define('PHPGRID_DB_HOSTNAME', 'localhost'); 
define('PHPGRID_DB_USERNAME', 'root');     
define('PHPGRID_DB_PASSWORD', ''); 
define('PHPGRID_DB_NAME', 'custom_crm'); 
define('PHPGRID_DB_TYPE', 'mysql');  
define('PHPGRID_DB_CHARSET','utf8');
  • PHPGRID_DB_HOSTNAME – IP oder Hostname des Webservers
  • PHPGRID_DB_USERNAME – Datenbank-Benutzername
  • PHPGRID_DB_PASSWORD – Datenbank-Passwort
  • PHPGRID_DB_NAME – Datenbankname unseres CRM
  • PHPGRID_DB_TYPE – Datenbanktyp
  • PHPGRID_DB_CHARSET – immer ‚utf8‘ in MySQL

Seitenvorlage

Die CRM-Seitenvorlage

Bevor wir mit dem Erstellen unserer ersten CRM-Seite beginnen können, ist es eine gute Praxis, die Seitenelemente wiederverwendbar zu machen, wie Kopfzeile und Fußzeile.

Die Seite wird aus einer Kopfzeile, einem Menü, einem Körper und einer Fußzeile bestehen. Wir beginnen mit der Erstellung einer wiederverwendbaren Seitenvorlage.

head.php

Dies ist eine grundlegende HTML5-Vorlagenkopfzeile. Sie enthält einen Link zu einer benutzerdefinierten Stylesheet, die in einem späteren Schritt erstellt wird.




  
  
  

menu.php

Die obere Menüleiste

Beachten Sie die Verwendung von $_GET['currentPage']. Jede Seite setzt einen Wert, der den Namen der aktuellen Seite in der oberen Menüleiste hervorhebt.

Fügen Sie den folgenden Code in style.css für die Menügestaltung ein. Er verwandelt die obige unsortierte Liste in ein Menü.

#menu ul { 
  list-style-type: none; 
  margin: 0; 
  padding: 0; 
  overflow: hidden; 
  background-color: #1590C2;
} 
#menu ul li { 
  float: left; 
}
#menu ul li a { 
  display: block; 
  color: white;
  text-align: center; 
  padding: 14px 16px; 
  text-decoration: none; 
}
#menu ul li a:hover, 
#menu .active { 
  background-color: #ddd; 
  color: black; 
}

footer.php

Schließende Tags für die Elemente, die wir in der Kopfzeile geöffnet haben

Unsere vollständige wiederverwendbare Seitenvorlage

Dies ist die vollständige Seitenvorlage. Der Hauptinhalt wird nach Section Title eingefügt.

Mein benutzerdefiniertes CRM


Abschnittstitel




Hauptseiten des CRM

Sind Sie noch dabei? Gut! Wir können nun endlich die erste Seite in unserem CRM entwickeln.

Unser CRM für Vertriebsmitarbeiter hat vier Seiten

  • Aufgaben
  • Leads
  • Opportunities
  • Kunden/Gewonnen

Jede Seite steht für eine andere Phase in einem typischen Verkaufszyklus.

Design-Mockup

Hier ist unser CRM-Design-Mockup für die Vertriebsmitarbeiter.

CRM-Bildschirm für das Vertriebsteam

Aufgaben

Wenn sich ein Vertriebsmitarbeiter anmeldet, ist die erste Seite, die er sieht, eine Liste der aktuellen Aufgaben.

Wie Sie sich vielleicht erinnern, speichert unsere notes-Tabelle alle Informationen zu Vertriebsaktivitäten. Wir können ein Datagrid erstellen und es mithilfe von phpGrid aus der Notes-Tabelle befüllen.

Der Hauptinhalt der Tasks-Seite ist ein Datagrid. Die folgenden beiden Zeilen geben uns eine Liste der Aufgaben des aktuellen Vertriebsmitarbeiters.

 display();
?>
  • Die erste Zeile erstellt ein phpGrid-Objekt, indem sie die SELECT-SQL-Anweisung, ihren Primärschlüssel – ID – und dann den Namen der Datenbanktabelle – notes – übergibt.
  • Die zweite und letzte Zeile ruft die Funktion display() auf, um das Datagrid auf dem Bildschirm darzustellen. Schauen Sie sich die Basis-Datagrid-Demo für weitere Details an.

Leads

Die Leads-Seite enthält eine Liste der aktuellen Leads, für die der Vertriebsmitarbeiter verantwortlich ist. Jeder Lead kann eine oder mehrere Notizen haben. Wir verwenden dafür die Subgrid-Funktion von phpGrid.

Wir müssen auch set_query_filter() verwenden, um nur die Leads mit Status = 1 und nur für den aktuellen Vertriebsmitarbeiter anzuzeigen.

Kontaktstatus-Tabelle

Kontaktstatus-Tabelle
set_query_filter(" Status = 1 && sales_rep = 1 ");

  // the detail grid displays notes about a lead
  $sdg = new C_DataGrid("SELECT * FROM notes", "id", "notes");
  $sdg->set_query_filter(" Sales_Rep = 1 ");
  $sdg->enable_edit();

  $dg->set_subgrid($sdg, 'Contact', 'id');
  $dg -> display();
?>

Möglichkeiten

Ein Lead wird zu einer Opportunity, sobald er qualifiziert ist. Die Opportunities-Seite ist ähnlich wie die Leads-Seite. Der einzige Unterschied ist der gefilterte Statuscode in set_query_filter, der Status = 2 lautet.

set_query_filter(" Status = 2 && sales_rep = 1 ");

  $sdg = new C_DataGrid("SELECT * FROM notes", "id", "notes");
  $sdg->set_query_filter(" Sales_Rep = 1 ");
  $sdg->enable_edit();

  $dg->set_subgrid($sdg, 'Contact', 'id');
  $dg -> display();
?>

Kunden/Gewonnen

Kunden/Gewonnen hat den Status = 3. Ähnlich wie bei Leads und Opportunities können Kunden/Gewonnen auch Notizen haben.

set_query_filter(" Status = 3 && sales_rep = 1 ");

  $sdg = new C_DataGrid("SELECT * FROM notes", "id", "notes");
  $sdg->set_query_filter(" Sales_Rep = 1 ");
  $sdg->enable_edit();

  $dg->set_subgrid($sdg, 'Contact', 'id');
  $dg -> display();
?>

Das ist alles, was es für Vertriebsmitarbeiter in unserem einfachen CRM zu tun gibt.

Manager-Dashboard

Der Vertriebsmanager hat Zugriff auf alle Datensätze in der Vertriebspipeline sowie die Möglichkeit, das Vertriebsteam und Kundendaten zu verwalten.

Hier sind die Design-Mockups

Meine Vertriebsmitarbeiter

Menü

Das Manager-Dashboard hat drei Menüpunkte.

Hauptinhalt

Jeder Menüpunkt repräsentiert eine Tabelle in der CRM-Datenbank. $_GET['gn'] speichert den Tabellennamen. Es generiert dynamisch das Datagrid basierend auf dem übergebenen Tabellennamen.

set_subgrid($sdg, 'sales_rep', 'id');
        break;

    case "notes":
        $dg = new C_DataGrid("SELECT * FROM notes", "id", "notes");
        break;

    case "contact":
        $dg = new C_DataGrid("SELECT * FROM contact", "id", "contact");

        $sdg = new C_DataGrid("SELECT * FROM notes", "id", "notes");
        $sdg->enable_edit();

        $dg->set_subgrid($sdg, 'Contact', 'id');
        break;
}

  $dg->enable_edit();
  $dg->display();
?>

Mein Vertriebsmitarbeiter

Da ein Vertriebsmanager schnell herausfinden muss, mit wem ein Vertriebsmitarbeiter zusammenarbeitet, haben wir ein Detailgitter $sdg hinzugefügt, das aus der Kontakt-Tabelle gefüllt und mit dem übergeordneten Gitter verknüpft ist.

$sdg = new C_DataGrid("SELECT * FROM contact", "id", "contact");
$dg->set_subgrid($sdg, 'sales_rep', 'id');

sales_rep ist der Verbindungsschlüssel in der contact-Tabelle zum id, das der Fremdschlüssel in der users-Tabelle ist. Denken Sie daran, dass die users alle Informationen unserer Vertriebsmitarbeiter speichert.

Screenshots

CRM – Vertriebsbildschirm
CRM – Manager-Bildschirm

Interaktive Demo

CRM-Bildschirm für Vertriebsmitarbeiter
CRM-Bildschirm für Manager

GitHub-Quellcode

Repo