Variants in Kategorielisten (list.tpl) anzeigen

Hallo liebe Oxid Forum Experten,

ich bitte vorab schon um Nachsicht, dass ist mein erste Forumsfrage.

Mein Problem ist folgendes, ich muss für unseren Kunden die Kategorieliste so anpassen, dass nicht die Parents sondern die Varianten einzeln aufgelistet sind.
Jetzt habe ich bereits im Oxid Shop die list.tpl Datei gefunden und weiß, dass er über folgendes Snippet eine ArticleListe Ladet und dort vielleicht (?) muss eine Varianten Liste rein?


[{if $oView->getArticleList()|@count > 0}]
        <div class="list-head clearfix">
            <h1 class="pageHead">[{$oView->getTitle()}]</h1>
            <div class="list-locator clearfix">
                [{include file="widget/locator/listlocator.tpl" locator=$oView->getPageNavigationLimitedTop() attributes=$oView->getAttributes() listDisplayType=true itemsPerPage=true sort=true }]
            </div>
        </div>
        [{* List types: grid|line|infogrid *}]
        [{include file="widget/product/list.tpl" type=$oView->getListDisplayType() listId="productList" products=$oView->getArticleList() showPrices=true}]
    [{/if}]

Über jeden Hinweis wäre ich überdankbar!

Oxid Shop Version 4.9.4

oxArticleList.php

Folgendes ändern…

protected function _getCategorySelect($sFields, $sCatId, $aSessionFilter)
    {
        $sArticleTable = getViewName('oxarticles');
        $sO2CView = getViewName('oxobject2category');

        // ----------------------------------
        // sorting
        $sSorting = '';
        if ($this->_sCustomSorting) {
            $sSorting = " {$this->_sCustomSorting} , ";
        }

        // ----------------------------------
        // filtering ?
        $sFilterSql = '';
        $iLang = oxRegistry::getLang()->getBaseLanguage();
        if ($aSessionFilter && isset($aSessionFilter[$sCatId][$iLang])) {
            $sFilterSql = $this->_getFilterSql($sCatId, $aSessionFilter[$sCatId][$iLang]);
        }

        $oDb = oxDb::getDb();

        $sSelect = "SELECT $sFields, $sArticleTable.oxtimestamp FROM $sO2CView as oc left join $sArticleTable
                    ON $sArticleTable.oxid = oc.oxobjectid
                    WHERE " . $this->getBaseObject()->getSqlActiveSnippet() . " and $sArticleTable.oxparentid = ''
                    and oc.oxcatnid = " . $oDb->quote($sCatId) . " $sFilterSql ORDER BY $sSorting oc.oxpos, oc.oxobjectid ";

        return $sSelect;
    }
protected function _getCategorySelect($sFields, $sCatId, $aSessionFilter)
    {
        $sArticleTable = getViewName('oxarticles');
        $sO2CView = getViewName('oxobject2category');

        // ----------------------------------
        // sorting
        $sSorting = '';
        if ($this->_sCustomSorting) {
            $sSorting = " {$this->_sCustomSorting} , ";
        }

        // ----------------------------------
        // filtering ?
        $sFilterSql = '';
        $iLang = oxRegistry::getLang()->getBaseLanguage();
        if ($aSessionFilter && isset($aSessionFilter[$sCatId][$iLang])) {
            $sFilterSql = $this->_getFilterSql($sCatId, $aSessionFilter[$sCatId][$iLang]);
        }

        $oDb = oxDb::getDb();

        $sSelect = "SELECT $sFields, $sArticleTable.oxtimestamp FROM $sO2CView as oc left join $sArticleTable
                    ON $sArticleTable.oxid = oc.oxobjectid
                    WHERE " . $this->getBaseObject()->getSqlActiveSnippet() . "
                    and oc.oxcatnid = " . $oDb->quote($sCatId) . " $sFilterSql ORDER BY $sSorting oc.oxpos, oc.oxobjectid ";

        return $sSelect;
    }

…könnte schon reichen.

Vielen Dank für deine schnelle Antwort!
Leider hat diese Änderung nichts bewirkt oder verändert.

Vielleicht ist es verständlicher, wenn ich die URL mitschicke…
http://p357787.mittwaldserver.info/Mineralstoffe/

Jetzt sollte z.B. das Produkt http://p357787.mittwaldserver.info/Mineralstoffe/Mega-Mineral.html die zwei Varianten, die erste mit 180Tabletten und die zweite mit 240Tabletten in der Übersicht http://p357787.mittwaldserver.info/Mineralstoffe/ jeweils dargestellt sein als Produkt.

Vielen Dank für deine schnelle Rückantwort!
Leider hat das nichts gebracht, es genauer gesagt überhaupt keinen Effekt auf die Ausgabe…

Weitere Ideen?

Was ich mich frage, ist es überhaupt möglich Variants in der Kategorieliste anzeigen zu lassen? Muss man dafür nicht den Artikel immer extra nochmal anlegen mit dem Unterschied im Titel (z.B. 120 Tabletten &/oder 180 Tabletten)?

http://p357787.mittwaldserver.info/Mineralstoffe/

Dann sollte es so gehen, allerdings ohn Parents. Counter etc. musst noch anpassen:

protected function _getCategorySelect($sFields, $sCatId, $aSessionFilter)
    {
        $sArticleTable = getViewName('oxarticles');
        $sO2CView = getViewName('oxobject2category');

        // ----------------------------------
        // sorting
        $sSorting = '';
        if ($this->_sCustomSorting) {
            $sSorting = " {$this->_sCustomSorting} , ";
        }

        // ----------------------------------
        // filtering ?
        $sFilterSql = '';
        $iLang = oxRegistry::getLang()->getBaseLanguage();
        if ($aSessionFilter && isset($aSessionFilter[$sCatId][$iLang])) {
            $sFilterSql = $this->_getFilterSql($sCatId, $aSessionFilter[$sCatId][$iLang]);
        }

        $oDb = oxDb::getDb();

        $sSelect = "SELECT $sFields, $sArticleTable.oxtimestamp FROM $sO2CView as oc left join $sArticleTable
                    ON $sArticleTable.oxparentid = oc.oxobjectid
                    WHERE " . $this->getBaseObject()->getSqlActiveSnippet() . "
                    and oc.oxcatnid = " . $oDb->quote($sCatId) . " $sFilterSql ORDER BY $sSorting oc.oxpos, oc.oxobjectid ";

        return $sSelect;
    }

Ansicht: http://4101.foxido.de/bekleidung/fashion/fuer-sie/jeans/

“… allerdings ohn Parents. Counter etc. musst noch anpassen: …”

Sorry, das ich so dumm Nachfrage, aber ich bin in das Oxid Thema erst seit 4 Monaten reingeschmissen worden (bestehendes Projekt) und bin wirklich blank.

Was genau meinst Du mit ohne Parents. Counter? Ist das dann in der list.tpl?
Danke danke danke für deine Hilfe!!!

Diese Schwierigheiten sind vielen nicht unbekannt. Da muss man leider ein wenig lesen.

zum Thema. In der neuen Abfrage wird statt der Spalte oxarticles__oxid eines Artikels die Spalte oxarticles__oxparentid zum Vergleich genutzt, was die Ausgabe der Kinderartikel (Varianten) ermöglicht. Wenn die Parent-Artikel im Shop kaufbar sind und erscheinen sollen, muss die Abfrage insgesamt erweitert werden, z.B. über UNION (mysql), womit dann die Ausgabe von parent und child möglich ist.

Ich habe das mal in die Ansicht eingefügt. So wären Parents und Childs sichtbar. Die Anzeige der Variantenauswahl bei den Parents müsste dann noch weg.

Noch schnell zum Counter: Die Counterfunktion z.B. auf der Seite http://4101.foxido.de/bekleidung/fashion/fuer-sie/ ist anzupassen, weil sie inur die Parent-Jeans (in dem Fall 3) zählt und nicht die nun angezeigten Varianten.