Der eine oder andere Shopbetreiber eines XT-Commerce 3.04 oder xtcModified wird sich wohl schon des öfteren geärgert haben, das man im Admin-Interface des Shops nicht sehen kann, wer die letzte Änderung gemacht hat. Standardmäßig wird hier nur das Datum und die Uhrzeit der letzten Änderung angezeigt. In diesem Beitrag zeigen wir wie man das Logging in der modified eCommerce Shopsoftware erweitern kann.
Wer mehr als nur einen Mitarbeiter an dem Shop zu arbeiten hat, kann diesen Benutzern zwar mit verschiedenen Rechten versehen. Aber es ist nicht möglich raus zubekommen, wer die letzte Anpassung gemacht hat. Diese Information ist vor allem dann wichtig, wenn mal wieder auf unerklärliche Weise falsche Bilder in einem Artikel vorhanden sind oder Infos im Text zu finden sind, die man da so nicht eingetragen hat.
Mit ein wenig PHP-Kenntnissen und meiner hier gebotenen Anleitung wird zusätzlich zum Änderungsdatum der Name des Bearbeiters angezeigt. Ich habe diese Anleitung nach dem Einbau in einen modified Shop Version 1.06 getestet und geschrieben. Ich übernehme natürlich keine Haftung für die Richtigkeit der Angaben. Wer diese Anleitung ausprobiert tut dies auf eigene Gefahr. Wer sich die Modifikation nicht selber zutraut, dem biete ich an das durch unsere Firma ausführen zu lassen.
Inhaltsverzeichnis
Schritt 1 – Datenbank des Shops erweitern
Einige werden jetzt aufschreien und sagen „bloß nicht an der Datenbank rum ändern“. Keine Panik es werden nur 2 Tabellen um jeweils 1 Feld erweitert. Diese Maßnahme stellt nur eine Erweiterung des bereits hinterlegten Änderungsdatum dar. Zum einen betrifft das die Tabelle categories und products.
Die Tabelle categories wird nach dem bestehenden Feld „last_modified“ um das Feld „last_modified_user“ erweitert. Als Datentyp verwenden wie INT(11) und NULL wird akzeptiert. Bei der Tabelle products gehen wir ähnlich vor, nur das hier nach dem Feld „products_last_modified“ das Feld „products_last_modified_user“ eingefügt wird. Jeweils mit den gelichen Werten wie bei categories.
Führt einfach folgenden SQL-Code über phpMyAdmin in eurer Shop-Datenbank aus.
ALTER TABLE `categories` ADD `last_modified_user` INT( 11 ) NULL AFTER `last_modified` ; ALTER TABLE `products` ADD `products_last_modified_user` INT( 11 ) NULL AFTER `products_last_modified` ;
Schritt 2 – User ID mit speichern
Im nächsten Schritt müssen wir xtcModified sagen, das er jetzt zu dem Änderungsdatum auch noch die customer_id des Bearbeiters mit speichert. Dafür haben wir ja eben in der Tabelle das zusätzliche Feld angelegt.
Hierfür müssen wir die nachfolgenden Änderungen in der nachfolgenden Datei machen.
admin/includes/classes/categories.php
Etwa bei Zeile 38 folgendes suchen:
define('ADD_PRODUCTS_FIELDS','products_last_modified_user');
Dahinter folgendes einfügen:
define('ADD_PRODUCTS_DESCRIPTION_FIELDS','products_order_description');
Etwa bei Zeile 172 nach folgendem Code suchen:
$update_sql_data = array ('last_modified' => 'now()');
und mit nachfolgendem Code ersetzen:
$update_sql_data = array ('last_modified' => 'now()', 'last_modified_user' => $_SESSION['customer_id']);
Etwa bei Zeile 295 folgendes suchen:
$sql_data_array['last_modified'] = 'NOW()';
und dahinter folgendes einfügen:
$sql_data_array['last_modified_user'] = $_SESSION['customer_id'];
Etwa bei Zeile 266 nach folgendem Code suchen:
xtc_db_query("UPDATE ".TABLE_CATEGORIES." SET parent_id = '".xtc_db_input($dest_category_id)."', last_modified = now() WHERE categories_id = '".xtc_db_input($src_category_id)."'");
Und mit nachfolgendem Code ersetzen:
xtc_db_query("UPDATE ".TABLE_CATEGORIES." SET parent_id = '".xtc_db_input($dest_category_id)."', last_modified = now(), last_modified_user = ".$_SESSION['customer_id']." WHERE categories_id = '".xtc_db_input($src_category_id)."'");
Etwa bei Zeile 650 nach folgendem Code suchen:
$update_sql_data = array ('products_last_modified' => 'now()');
Und durch nachfolgendem Code ersetzen:
$update_sql_data = array ('products_last_modified' => 'now()', 'products_last_modified_user' => $_SESSION['customer_id']);
Etwa bei Zeile 980 bis 992
return xtc_db_query("update ".TABLE_PRODUCTS." set products_status = '1', products_last_modified = now() where products_id = '".$products_id."'"); } elseif ($status == '0') { return xtc_db_query("update ".TABLE_PRODUCTS." set products_status = '0', products_last_modified = now(), where products_id = '".$products_id."'");
Und durch folgenden Code ersetzen:
return xtc_db_query("update ".TABLE_PRODUCTS." set products_status = '1', products_last_modified = now(), products_last_modified_user = ".$_SESSION['customer_id']." where products_id = '".$products_id."'"); } elseif ($status == '0') { return xtc_db_query("update ".TABLE_PRODUCTS." set products_status = '0', products_last_modified = now(), products_last_modified_user = ".$_SESSION['customer_id']." where products_id = '".$products_id."'");
So fürs erste geschafft. Damit dürften jetzt erst einmal bei allen Änderungen an den Kategorien und Produkten die IDs des Benutzers mit gespeichert werden, der die letzte Änderung gemacht hat.
Schritt 3 – Anzeige mit dem Namen anpassen.
Jetzt, nachdem das Speichern der Benutzer ID funktioniert muß noch die Ausgabe des Übeltäters im xtcModified eingebaut werden. Dies geschieht in der nachfolgenden Moduldatei:
admin/includes/modules/categories_views.php
Als erstes müssen wir gleich am Anfang eine kleine Funktion hinzufügen, womit der Benutzername passend zur Benutzer ID im Klartext zurückgegeben wird.
An den Anfang einfügen so bei Zeile 26:
function get_customers_data ($customer_id) { $customers1_query = xtc_db_query("SELECT * FROM ".TABLE_CUSTOMERS." WHERE customers_id = '".(int)$customer_id."'"); $customers1 = xtc_db_fetch_array($customers1_query); return ($customers1['customers_firstname'] . " " . $customers1['customers_lastname']); }
In Zeile 245 folgende Abfrage erweitern/anpassen:
c.date_added, c.last_modified, c.last_modified_user, c.categories_status
In Zeile 262 eine ähnliche Abfrage der DB anassen:
c.date_added, c.last_modified, c.last_modified_user, c.categories_status
Etwa bei Zeile 409 folgenden Code anpassen:
p.products_date_added, p.products_last_modified, p.products_last_modified_user, p.products_date_available, p.products_status,
Un das gleiche nochmal in etwa Zeile 494
p.products_discount_allowed, p.products_date_added, p.products_last_modified, p.products_last_modified_user, p.products_date_available, p.products_status, p.products_startpage,
Das gleiche muss nochmal bei den Zeilen 712, 781, 745 gemacht werden. Nur muss hier folgender Code
eingefügt werden:
c.date_added, c.last_modified, c.last_modified_user, c.categories_status
Etwa bei Zeile 942 folgenden Code suchen:
$contents[] = array('text' => '<div style="padding-left: 50px;">' . TEXT_LAST_MODIFIED . ' ' . xtc_date_short($cInfo->last_modified) . '</div>');
und durch nachfolgenden Code ersetzen:
$contents[] = array('text' => '<div style="padding-left: 50px;">' . TEXT_LAST_MODIFIED . ' ' . xtc_date_short($cInfo->last_modified) . '<br />(' . get_customers_data ($cInfo->last_modified_user) . ')</div>');
Etwa in Zeile 975 nach folgenden Zeilen suchen:
$contents[] = array('text' => '<div style="padding-left: 30px;">' . TEXT_LAST_MODIFIED . ' ' . xtc_date_short($pInfo->products_last_modified) . '</div>');
Und durch nachfolgendem Code ersetzen:
$contents[] = array('text' => '<div style="padding-left: 30px;">' . TEXT_LAST_MODIFIED . ' ' . xtc_date_short($pInfo->products_last_modified) . '<br />(' . get_customers_data ($pInfo->products_last_modified_user) . ')</div>');
Abschluss und Funktionsprobe
So nach dem nun der Code angepasst ist, können wir die Funktionsprobe machen. Im Moment dürfte hier noch nicht wirklich etwas zu sehen sein. Nur zwei Klammern unter dem Datum. Ist ja auch klar, wir müssen jetzt erst mal eine Änderung machen.
Der gesamte Einbau mit meiner Anleitung für das erweiterte Logging im xtCommerce oder modified E-Commersce Shop dürfte ca. 1 Stunde dauern. Wer sich da nicht selber rann traut, dem helfe ich da gerne weiter. Ansonsten übernehme ich keine Gewähr für die Richtigkeit der Angaben. Auf jeden Fall sollten vor dem Ändern an einzelnen Dateien diese sorgfältig gesichert werden, damit man Sie im Notfall wieder herstellen kann.
0 Kommentare