Artikel nach Hersteller gruppieren und anzeigen lassen
06. Okt 2009 18:55 2 Kommentare
Heute zeige ich wie man auf der Artikelübersicht alle Hersteller mit einer Liste der zugehörigen Artikel anzeigen lassen kann. Als Überschrift nehme ich einfach den Herstellernamen, denkbar wäre auch ein Logo einzufügen.
Ziel
Auf der Produktübersicht eine zusätzliche Möglichkeit schaffen alle Artikel einer Kategorie nach Herstellern zu gruppieren. Wobei der Herstellername als Kopf der Gruppe angezeigt wird gefolgt von zugehörigen Artikeln. Dies kann z.B. so aussehen:
Herstellername
Artikel A
Artikel D
Herstellername
Artikel B
Artikel C
Vorbereitungen
Als erstes erweitern wir die Funktion "buildDataArray" der Produkt-Klasse um eine neue Zeile um Artikel-Hersteller anzuzeigen. Die Datei finden wir unter /includes/classes/product.php.
Im Array, nach
'PRODUCTS_NAME' => $array['products_name'],
fügen wir eine neue Zeile für Hersteller ein:
'PRODUCTS_MANUFACTURER' => $this->getManufacturersData($array['manufacturers_id']),
im nächsten Schritt definieren wir eine neue Funktion, die uns alle relevanten Informationen zu dem jeweiligen Hersteller anzeigt.
function getManufacturersData($man_id)
{
if(is_numeric($man_id)){
$man_array = array();
$image = '';
$url = '';
$link = '';
$manufacturer_query = xtDBquery("
SELECT
m.manufacturers_id,
m.manufacturers_name,
m.manufacturers_image,
mi.manufacturers_url
FROM
" . TABLE_MANUFACTURERS . " m,
" . TABLE_MANUFACTURERS_INFO . " mi
WHERE
m.manufacturers_id = '".$man_id."'
AND
m.manufacturers_id = mi.manufacturers_id
AND
mi.languages_id = '".(int)$_SESSION['languages_id']."'");
$manufacturer = xtc_db_fetch_array($manufacturer_query,true);
if(!empty($manufacturer['manufacturers_image']))
$image = DIR_WS_IMAGES . $manufacturer['manufacturers_image'];
if(!empty($manufacturer['manufacturers_url']))
$url = xtc_href_link(FILENAME_REDIRECT, 'action=manufacturer&'.xtc_manufacturer_link($manufacturer['manufacturers_id'],$manufacturer['manufacturers_name']));
if(!empty($manufacturer['manufacturers_name']))
$link = xtc_href_link(FILENAME_DEFAULT, xtc_manufacturer_link($manufacturer['manufacturers_id'],$manufacturer['manufacturers_name']));
$man_array = array(
'image' => $image,
'name' => $manufacturer['manufacturers_name'],
'link' => $link,
'url' => $url
);
return $man_array;
}
}
Nun können wir in Templates alle möglichen Herstellerangaben ausgeben. Z.B. um Herstellernamen anzuzeigen fügen wir dies hier ein:
{$module_data.PRODUCTS_MANUFACTURER.name}
Bitte beachten, es wird stets ein Array zurückgeliefert. Die einzelne Elemente spricht man über Variablen, name, image, link und url an.
Schritt 2:
Im zweiten Schritt passen wir die Datei "defaults.php", die Sie unter /includes/modules/ finden. Das ist auch unser letzter Schritt der Vorbereitung.
Vor der letzten SQL Abfrage
$listing_sql = "...";
fügen wir unsere neue Zeile mit Sortierung nach Hersteller an:
$sorting = "ORDER BY m.manufacturers_id ASC";
Template anpassen
Durch unsere Vorbereitung haben wir geschafft nicht nur alle Infos eines Artikel Herstellers anzuzeigen sondern auch eine Alphabetische Sortierung nach Herstellernamen ermöglicht.
Im Template via Smarty fragen wir im foreach Block nach Herstellernamen und zeigen ihn an.
Nach Zeile
{foreach name=aussen item=module_data from=$module_content}
fügen wir das hier ein:
{if $manu != $module_data.PRODUCTS_MANUFACTURER.name}
{assign var=manu value=$module_data.PRODUCTS_MANUFACTURER.name}
<p>{$module_data.PRODUCTS_MANUFACTURER.name}</p>
{/if}

Einen Kommentar schreiben
Kommentar von Thosten Niggemeier | 30.03.2010
vielen Dank
Kommentar von Sergej Stroh | 03.04.2010
damit es auch bei "products_new" und Suchergebnissen "advanced_search_result" "funktioniert, muss die SQL Abfrage um "manufacturers_id" ergänzt werden.