Wir erweitern die xt:Commerce Herstellerausgabe – Teil 2
Im letzten Beitrag zum Shopsystem xt:Commerce haben wir uns bereits mit den Herstellern auseinandergesetzt. Wir haben anhand von bereits bestehenden Datenbankfeldern unser Admin-Interface sowie Ausgabe der Meta-Tags soweit erweitert, dass xt:Commerce nun auch für Hersteller Meta-Daten ausgeben kann(Description, Titel und Tags).
Nun wollen wir einen Schritt weitergehen. Dieses Mal weniger in Richtung SEO (nur am Rande) sondern mehr in Richtung Usability, denn was wäre wenn sich ein potentieller Käufer zunächst nur für den Hersteller interessiert. Was hat der Hersteller bisher gemacht, was sind seine postiven Aspekte usw. Als Schlachtplan führen wir uns diesmal vor Augen:
- Modifzieren der Eingabe der Hersteller
- Modifzieren des Templates, damit xt:Commerce das Ganze auch ausgibt
Vorüberlegung und Vorarbeiten an xt:Commerce
Wenn wir uns zurückerinnern mussten wir für unsere Meta-Daten keine Änderungen an der Datenbank durchführen. Wenn wir jetzt noch einmal in die Datenbank von xt:Commerce schauen, stellen wir fest das Hersteller Content außer Acht gelassen wurde. Wir fügen also mal wieder Datenfelder ein.
Neben der Datenbank benötigen wir auch wieder ein paar andere Dateien. Die erste ist wie beim letzten Mal auch die manufacturers.php aus dem "admin"-Ordner. In dieser fügen wir noch ein Eingabefeld ein und ergänzen wieder die Datenbankabfragen.
Damit die ganze Geschichte auch nach einer Herstellerauswahl seitens des Besuchers ausgegeben wird, müssen wir effektiv 2 Dateien bearbeiten. Wenn man sich fragt wieso das, muss man sich vor Augen halten wie xt:Commerce bzw. das Templatesystem Smarty Seiten aufbauen. Der Ablauf des Templatesystems läft folgendermaßen ab:
- Es wird eine dynamische Datei geöffnet, welche Daten berechnet und an das Template weitergeht
- Smarty lädt das dazugehörige Template und fügt die von xt:Commerce übergebenen Daten ein
- Der Browser interpetiert die Daten und gibt diese im Browser aus
Was wird nun bei Auswahl eines Herstellers aufgerufen? In diesem Fall öffnet xt:Commerce die Datei product_listing.php (Ordner "includes/modules"). Hier werden die Daten für das Product-Listing Template aufbereitet, welches im Anschluss auch ausgegeben wird.
Fassen wir einmal unsere Arbeiten bis hierhin zusammen:
- Datenbank - Backup (sehr wichtig !!!)
- Backup der manufacturers.php aus dem Admin-Ordner
- Backup der product_listing.php aus dem Ordner includes/modules
- Backup des product_listing-Templates (bei Bedarf mehrere Templates)
Wir modifzieren die xt:Commerce Datenbank
Nachdem wir unsere xt:Commerce Datenbank gesichert haben, können wir nun anfangen diese zu modifzieren, damit unser Text anschließend auch gespeichert wird. Wir öffnen also unseren Tabelleneditor unserer Wahl (z. B. phpmyadmin) und begeben uns zur Tabelle "manufacturers_info" und führen folgenden Code aus:
ALTER TABLE `manufacturers_info` ADD `manufacturers_content` TEXT NOT NULL ;
Mit diesen Code wird ein Feld angelegt welches als "manufacturers_content" bezeichnet wird und Texte (in unserem Fall HTML-Code) speichert.
Wieder einmal die manufacturers.php
Wer den letzten Post zum Thema xt:Commerce Herstellercontent erweitern gelesen hat, wird schon ahnen was auf ihm zukommt. Wir werden an mehreren Stellen das Grundsystem von xt:Commerce gewaltig aufbohren. Wir arbeiten uns auch diesmal wieder von oben nach unten durch um Hin- und Herspringen zu vermeiden. Zuerst werden wir wieder unsere Daten aus der $_POST-Variable in eine Lokale Variable übergeben. Dieser Teil befindet sich ungefähr in den Zeilen 26-30 der manufacturers.php. Der fertige Code soll wie folgt aussehen:
/* Anfang seo-geek.de Modifizierung */
$manufacturers_desc = xtc_db_prepare_input($_POST['manufacturers_meta_description']);
$manufacturers_title = xtc_db_prepare_input($_POST['manufacturers_meta_title']);
$manufacturers_keywords = xtc_db_prepare_input($_POST['manufacturers_meta_keywords']);
$manufacturers_content = xtc_db_prepare_input($_POST['manufacturers_content']);
$neu = array(
'manufacturers_meta_title' => xtc_db_prepare_input($manufacturers_title),
'manufacturers_meta_description' => xtc_db_prepare_input($manufacturers_desc),
'manufacturers_meta_keywords' => xtc_db_prepare_input($manufacturers_keywords),
'manufacturers_content' => xtc_db_prepare_input($manufacturers_content)
);
// Ende seo-geek.de Modifikation
Wer die vorherige Modifikation noch nicht eingebaut hat, sucht sich in den ersten 30 Zeilen die Stelle heraus in denen z. B. folgendes steht: "$manufacturers_name = xtc_db_prepare_input($_POST['manufacturers_name'])";". Je nachdem welche Modifikation man durchführen möchte fügt man entweder alle 4 Zeilen ein oder wenn man nur Hersteller-Beschreibungen ausgeben möchte nur die letzte Zeile mit $manufacturers_content.
Modifikation der Eingabefelder
Um Daten auch eingeben zu können fehlen uns jetzt noch die zusätzlichen Eingabefelder im Admin-Bereich. Wir fügen hier eine Textarea ein. xt:Commerce bietet dazu schon eine kleine Funktion -> xtc_draw_textarea_field();
/* Anfang seo-geek.de Modifikation */
$contents[] = array('text' => '<br />' . 'Hersteller-Meta-Title ' . '<br />' . xtc_draw_input_field('manufacturers_meta_title'));
$contents[] = array('text' => '<br />' . 'Hersteller-Meta-Descripton ' . '<br />' . xtc_draw_input_field('manufacturers_meta_description'));
$contents[] = array('text' => '<br />' . 'Hersteller-Meta-Tags' . ' <br />' . xtc_draw_input_field('manufacturers_meta_keywords'));
$contents[] = array('text' => '<br />' . 'Hersteller-Content '. '<br />'. xtc_draw_textarea_field('manufacturers_content',0,30,10));
/* Ende seo-geek.de Modifikation */
$contents[] = array('text' => '<br />' . TEXT_MANUFACTURERS_URL . $manufacturer_inputs_string);
Diese Part fügen ca. in Zeile 225 ein. Das wäre ca. der Punkt im Skript, kurz bevor der Aufruf zur Hersteller-URL stattfindet. Das ist meines Erachtens nach die ideale Position - aber jedem das seine.
Nun brauchen wir noch Eingabefelder für den Fall wenn wir etwas am Text verändern wollen. Dazu gehen wir ein wenig tiefer im Code (ca. Zeile ) und fügen folgenden Code ein:
/* Anfang seo-geek.de Modifikation */
$man_info = "SELECT * FROM manufacturers_info WHERE manufacturers_id = '".$mInfo->manufacturers_id."' LIMIT 1";
$manufacturers_info = mysql_fetch_array(mysql_query($man_info));
$contents[] = array('text' => '<br />' . 'Hersteller-Meta-Title ' . '<br />' . xtc_draw_input_field('manufacturers_meta_title', $manufacturers_info['manufacturers_meta_title']));
$contents[] = array('text' => '<br />' . 'Hersteller-Meta-Descripton ' . '<br />' . xtc_draw_input_field('manufacturers_meta_description',$manufacturers_info['manufacturers_meta_description']));
$contents[] = array('text' => '<br />' . 'Hersteller-Meta-Tags' . ' <br />' . xtc_draw_input_field('manufacturers_meta_keywords',$manufacturers_info['manufacturers_meta_keywords']));
$contents[] = array('text' => '<br />' . 'Hersteller-Content' . ' <br />'.xtc_draw_textarea_field('manufacturers_content',0,30,10,$manufacturers_info['manufacturers_content']));
/* Ende seo-geek.de Modifikation */
$manufacturer_inputs_string = '';
Wenn wir das hier eingegeben haben können wir bereits Herstellerbeschreibungen eingeben. Es gibt hier nur ein Problem. Mit der Textarea kann nur Fließtext eingegeben werden. Wir können allerdings HTML-Code einfügen. Dieser wird dann wie gewohnt ausgegeben. Sobald ich wieder etwas mehr Zeit habe, werde ich versuchen einen WYSIWYG-Editor einzubauen.
Anpassen der product_listing.php
Um die Daten an die Templatedatei weiterzugeben muss diese die Daten erst aufbereiten. Dazu editieren wir die product_listing.php aus includes/modules.
Wir fügen in (ungefähr) Zeile 65 folgendes ein (von Anfang seo-geek.de Modifikation bis Ende):
while ($listing = xtc_db_fetch_array($listing_query, true)) {
$rows ++;
$module_content[] = $product->buildDataArray($listing);
}
/* Anfang seo-geek.de Modifikation */
if($_GET['manufacturers_id'])
{
$query = "SELECT t1.manufacturers_name, t1.manufacturers_image, t2.manufacturers_content FROM manufacturers AS t1
LEFT JOIN
manufacturers_info AS t2
ON
t1.manufacturers_id = t2.manufacturers_id
WHERE t1.manufacturers_id='".$_GET['manufacturers_id']."' LIMIT 1";
$tmpx = xtDBquery($query);
$tmpa = xtc_db_fetch_array($tmpx);
$module_smarty->assign('MANU_DATA',$tmpa);
}
/* Ende seo-geek.de Modifikation */
} else {
Hier prüfen wir zunächst ob die ID eines Herstellers gesetzt wurde. Ist dies der Fall erstellen wir eine Datenbankabfrage und ermitteln alle Daten die wir für die Ausgabe brauchen und übergeben diese an eine Smarty-Variable. Diese kann dann im Template aufgerufen werden.
Editieren des Templates
Nun kommen wir zur eigentlichen Ausgabe unserer xt:Commerce Herstellerdaten. Nachdem wir ja wissen, dass die Product_listing geöffnet wird editieren wir jene Datei und fügen an einer gewüschnten Stelle folgenden Code ein (Platzierung kann je nach xt:Commerce Template variieren):
<!-- Anfang seo-geek.de Modifikation -->
{if $MANU_DATA}
<div class="man_container">
<div class="man_pciture"><img src="/images/{$MANU_DATA.manufacturers_image}" alt="Artikel von {$MANU_DATA.manufacturers_name}" /></div>
<div class="clear"></div>
<div class="man_content">{$MANU_DATA.manufacturers_content}</div>
</div>
{/if}
<!-- Ende seo-geek.de Modifikation -->
Hier öffnen wir mehrere Div-Container um diesen nach Lust und Laune mittels CSS zu gestalten.
Wir greifen hier direkt auf die Smarty-Variablen zu, welche wir im vorherigen Schritt definiert haben.
Schlußgedanke
Damit haben wir es auch schon geschafft. Je nachdem ob wir ein Tabellen- oder CSS-Template benutzen müssen wir sicherstellen, das der Text auch ausgegeben wird. Mit etwas Geduld bekommt man das ganz schnell hin. Das ganze hat auch einen nachhaltigen Effekt für SEO-Zwecke. Google kann jetzt im Shop zusätzliche Informationen crawlen und kann diese (falls diese suchmaschinenoptimiert aufbereitet worden sind) schneller dem eigenen Shop zuordnen. So haben wir 2 Fliegen mit einer Klappe geschlagen - wir haben die Usability unserer xt:Commerce Shops erhöht und gleichzeitig unseren Shop etwas weiter suchmaschinenoptimiert.
Habt Ihr noch andere Tipps oder Erfahrungen? Ich freue mich über jedes Kommentar Eurerseits.
Alle Posts der Woche 29 / 2009 anschauen
Fandest Du den Beitrag interessant?
Fatal error: Call to undefined function the_flattr_permalink() in /var/www/html/web1028/html/seo-geek-de/wp-content/themes/seogeek/single.php on line 48





