Crossselling & Varianten

Hallo Zusammen,

ich hätte da mal ne Frage zu folgendem Problemchen:
Ich habe ein Produkt zu dem Varianten angelegt sind. Vaterartikel ist nicht kaufbar.
Zum Vaterartikel sind Crossselling Produkte angelegt.

Wenn ich jetzt bei dem Produkt eine Variante auswähle, verschwindet der Crosssellingbereich.
Liegt das daran, dass Varianten wie einzelne Produkte gesehen werden und somit jeder Variante die Crossselling Artikel einzeln neu zugeordnet werden müssten?
Und gibt es die Möglichkeit ein Fallback einzubauen? Also wenn keine Crossselling Produkte für eine Variante zugeordnet sind, dass dann die Produkte des Vaterartikels ausgegeben werden?

Bei den Beschreibungstexten war es auch so und das war glaube ich ein Bug für den es aber einen Workaround gab (meine ich mich zu erinnern)

Bin für jeden Hinweis dankbar.
Elmar

Ja daran liegt es, nimm mal einen Modeshop an, wo Variante Farbe = Grün, dann andere grüne Artikel vorschlägt …

Ansonsten müsste man oxarticles.php ungefähr so überladen :

public function getCrossSelling()
    {
        $oCrosslist = oxNew( "oxarticlelist");
        $oCrosslist->loadArticleCrossSell($this->oxarticles__oxid->value);
        if ( $oCrosslist->count() ) {
            return $oCrosslist;
        }elseif($this->_oParent){
           return $this->_oParent->getCrossSelling();
       }
    }

Gibt auch grad n neues Modul im Exchange dafür.

http://www.oxid-esales.com/de/exchange/extensions/varianten-beschreibung-crosssellings-zubehoer-0?term=2224

Vielen Dank für eure Infos, werde heute mal das Modul einbauen und dann sollte das ja erledigt sein.
Ich geb dann noch mal ne Rückmeldung.

Auf jeden Fall, Danke.
elmar

Ich bin auf das gleiche Problem gestoßen.

[QUOTE=holgt;70400]…

Ansonsten müsste man oxarticles.php ungefähr so überladen :

public function getCrossSelling()
    {
        $oCrosslist = oxNew( "oxarticlelist");
        $oCrosslist->loadArticleCrossSell($this->oxarticles__oxid->value);
        if ( $oCrosslist->count() ) {
            return $oCrosslist;
        }elseif($this->_oParent){
           return $this->_oParent->getCrossSelling();
       }
    }

[/QUOTE]

eleganter wäre wohl:


public function getCrossSelling()
    {
        if ( parent::getCrossSelling() ) {
            return parent::getCrossSelling();
        }
        if ( isset( $this->oxarticles__oxparentid->value ) && $this->oxarticles__oxparentid->value ) {
            return $this->getParentArticle()->getCrossSelling();
        }
    }

Nach dem gleichen Prinzip lassen sich auch getAccessoires und getSimilarProducts überladen. Jetzt fehlt nur noch die Langbeschreibung (https://bugs.oxid-esales.com/view.php?id=2956) und die Sache ist perfekt :slight_smile:

Ich habe das alles mal in oxidforge zur Verfügung gestellt:
https://projects.oxidforge.org/projects/slparentxsell

Hallo, habe das gleiche Problem in meinem Oxid CE 4.6.1 Shop.

Habe ich hier eine voreingestellte Funktion zur Anzeige der CossSell Artikel bei den Slaves übersehen, bzw. nicht aktiviert oder muss ich die oxarticle.php ändern, damit die CrossSell und Zubehör Artikel des Vaters auch bei den Varianten mit angezeigt werden?

Habe mir auch das File in Oxidforge angesehen und weiss leider nicht genau wie ich dieses verwenden kann???

Habe auch einzelne Teile aus der angegebenen Datei in die oxarticle.php übernommen, nur leider ohne Erfolg und mit damit verbundenen Fehlern…

Vielen Dank für Eure Hilfe!!!

nimm das hier

http://exchange.oxid-esales.com/de/Einkaufserlebnis/Produktdarstellung/Varianten-Beschreibung-CrossSellings-1-0-Stable-CE-4-5-x.html

für 19 Euro kannst Du wenig eigene Try&Error-Zeit einsetzen


class Extinheritance_oxArticle extends Extinheritance_oxArticle_parent{
    public function getAccessoires(){
        return $this->_inheritRelationListFromParentArticle(__FUNCTION__);
    }

    public function getSimilarProducts(){
        return $this->_inheritRelationListFromParentArticle(__FUNCTION__);
    }

    public function getCrossSelling(){
        return $this->_inheritRelationListFromParentArticle(__FUNCTION__);
    }

    protected function _inheritRelationListFromParentArticle($sFunctionName){
        if($this->isVariant() && oxRegistry::getConfig()->getConfigParam($sFunctionName)){
            if(oxRegistry::getConfig()->getConfigParam('bOnlyEmptyVariants')){
                $oRelationList = parent::$sFunctionName();
            }

            if(!isset($oRelationList)){
                $oRelationList = $this->getParentArticle()->$sFunctionName();
            }
        } else {
            $oRelationList = parent::$sFunctionName();
        }

        return $oRelationList;
    }
}

Ist zwar ein alter Thread, aber da ich das gerade für einen Kunden umgesetzt habe, eine kleine, performancemäßige Verbesserung des bisher verwendeten Vorschlags.

Hintergedanke ist dabei, dass der wiederholte Aufruf der Funktion im schlimmsten Fall jedesmal zu einer Datenbankabfrage wird. Außerdem gibt es mittlerweile ein paar zusätzliche OXID-Funktionen wie isVariant und dergleichen.

Jetzt könnte man natürlich noch prüfen ob wirklich ein Vaterartikel zurück kommt usw. aber glauben wir mal, dass niemand manuell kaputte Vaterartikel anlegt, sonst ist sowieso etwas im Argen.

In der metadata.php hätte ich dann noch folgende Settings hinterlegt, damit man das ganze vielleicht für weitere Kunden an/aus knipsen kann und so leichter wiederverwenden, oder als Basis für ein langsam wachsendes Modul verwenden kann. Jetzt müsst ihr halt noch die Sprachvariablen usw. definieren, aber das bekommt sicher jeder ohne Vorkauen hin. :slight_smile:


    'settings'  => array(
        array('group' => 'Article', 'name' => 'getSimilarProducts', 'type' => 'bool',   'value' => 'false'),
        array('group' => 'Article', 'name' => 'getAccessoires', 'type' => 'bool',   'value' => 'false'),
        array('group' => 'Article', 'name' => 'getCrossSelling', 'type' => 'bool',   'value' => 'false'),
        array('group' => 'Article', 'name' => 'bOnlyEmptyVariants', 'type' => 'bool',   'value' => 'false'),
    ),

Viele Grüße,
Johannes