Ergebnis 1 bis 5 von 5

Thema: Cross-Selling auf Produkt-Detailseite

  1. #1
    Contao-Nutzer Avatar von mario0511
    Registriert seit
    08.05.2012.
    Beiträge
    100

    Standard Cross-Selling auf Produkt-Detailseite

    Moin zusammen,

    ich würde gerne auf der Produkt-Detailseite eine Art Cross-Selling-Sektion anzeigen, welche Produkte aus der selben Kategorie wie das Detail-Produkt anzeigt.

    Hier suche ich einen Weg die Abfrage so durchzuführen, damit Attribute in der selben Struktur verfügbar sind wie bspw. im Template "metamodel_prerendered.html5".

    Zu Testzwecken verwende ich den folgenden Code:
    PHP-Code:
    $csProductsQuery = \Database::getInstance()
        ->
    prepare("SELECT * FROM mm_products WHERE id != ".$arrItem['raw']['id']." AND active = 1 AND subcategories = ?")
        ->
    limit(10)
        ->
    execute($arrItem['raw']['subcategories']['__SELECT_RAW__']['id']); 

    Gibt es eine Möglichkeit die aus der Abfrage gewonnenen Daten in eine Art Model zu drücken, woraus man dann ein assoziatives PHP-Array mit der gewohnten Attributstruktur erhält?
    Oder alternativ... kann ich die Abfrage direkt über MetaModels durchführen, woraus man dann ein assoziatives PHP-Array mit der gewohnten Attributstruktur erhält?

    Der alternative "standard" Lösungsweg, extra Listen-Module pro Kategorie einzurichten fällt raus da es u.U. zu viele Kategorien sind wofür man Module einrichten müsste.

    Im Handbuch habe ich leider keinen geeigneten Lösungsweg gefunden.

    Vielen Dank im Voraus!
    Geändert von mario0511 (02.06.2023 um 08:54 Uhr)

  2. #2
    Contao-Nutzer Avatar von mario0511
    Registriert seit
    08.05.2012.
    Beiträge
    100

    Standard

    Anhand des folgenden Artikels im MM-Handbuch konnte ich das gewünschte Ergebis erzielen.
    https://metamodels.readthedocs.io/de...tml#interfaces

  3. #3
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von mario0511 Beitrag anzeigen
    Der alternative "standard" Lösungsweg, extra Listen-Module pro Kategorie einzurichten fällt raus da es u.U. zu viele Kategorien sind wofür man Module einrichten müsste.
    Warum sollte man für jede Kategorie ein Modul anlegen?

    Ich gehe davon aus

    * mm_products mit Name, Alias... Kategorie(en)
    * mm_categories mit Name, Alias ...
    * Releation als Select (1:n) oder Tags (m:n)

    Detailseite mit

    * MM Liste Detailansicht - Filterregel "Einfache Abfrage" auf Alias
    * MM Liste X-Selling-Produkte - Filterregel "Eig. SQL"

    Die URL sieht ja dann i.E. so auf
    domain.tld/produkte/details/alias/produkt-moin-moin-0815 oder mit auto_item domain.tld/produkte/details/produkt-moin-moin-0815

    Detailangaben werden über Alias "produkt-moin-moin-0815" angezeigt...

    Nun zur Anzeige der Produkte der selben Kategorie(en) wie das Detailprodukt - der springende Punkt ist ein passendendes SQL-Query zu schreiben. Dabei ist es von Vorteil, das erstmal in phpmyAdmin o.Ä. zu machen und bei einem komplexen Gebilde das Stückweise aufzubauen. Ich arbeite da erstmal mit einem festen Wert, der dann mit der dynamsichen Komponenete ersetzt wird - also z. B.

    PHP-Code:
    SELECT id FROM mm_products
    WHERE alias 
    'produkt-moin-moin-0815' 
    zu

    PHP-Code:
    SELECT id FROM mm_products
    WHERE alias 
    = {{param::get?name=alias}} 
    Was Du suchst sind "Alle Produkte die die selbe Kategorie/Kategorien haben wie das Produkt mit dem Alias {{param::get?name=alias}} außer dem Detailprodukt Produkt selbst (mit dem Alias {{param::get?name=alias}}) und die veröffentlicht sind..."

    Anhaltspunkte siehe Handbuch https://metamodels.readthedocs.io/de...n-item-filtern

  4. #4
    Contao-Nutzer Avatar von mario0511
    Registriert seit
    08.05.2012.
    Beiträge
    100

    Standard

    Danke für die Ausführung und den Link zum Handbuch am Ende, der Teil war noch ziemlich informativ.

    Ich habe das wie folgt für mich lösen können und im Detailansichts-Template eingebaut:
    PHP-Code:
    $modelName 'mm_products';
    $renderId 2;

    $factory $this->getContainer()->get('metamodels.factory');
    $model $factory->getMetaModel($modelName);

    $filter $model->getEmptyFilter();

    $query sprintf(
        
    'SELECT * FROM %s WHERE active = 1 AND id != %s AND subcategories = %s',
        
    $modelName,
        
    $productData['raw']['id'],
        
    $productData['raw']['subcategories']['__SELECT_RAW__']['id']
    );
    $filter->addFilterRule(new \MetaModels\Filter\Rules\SimpleQuery($query));

    $csItemsQuery $model->findByFilter($filter);
    $csItems $csItemsQuery->parseAll('html5'$model->getView($renderId));

    dump($csItems); 
    Geändert von mario0511 (05.06.2023 um 08:18 Uhr)

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    ... viele Wege führen nach Rom

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •