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}

Zurück

Einen Kommentar schreiben

Kommentar von Thosten Niggemeier | 30.03.2010

Hallo, ich habe das Modul eingebaut und habe nun im product_listing die Variablen für Herstellername und Bild drin. Allerdings funktioniert das nicht bei der suchausgabe und bei products_new und angeboten.. was muss ich erweitern, damit ich da die Variablen auch habe?
vielen Dank

Kommentar von Sergej Stroh | 03.04.2010

Hallo Thosten,
damit es auch bei "products_new" und Suchergebnissen "advanced_search_result" "funktioniert, muss die SQL Abfrage um "manufacturers_id" ergänzt werden.

Umfrage

Nutzen Sie Ihr Smartphone für Online Shopping?
Gesamtanzahl der Stimmen= 39
Ja, ab und zu
23%
Ja, regelmäßig
18%
Nein
23%
Habe kein Smartphone
36%