Neu $Xselling->Standard->XSellGruppen in Produktliste bzw. get_product_list ausgeben

hii

Gut bekanntes Mitglied
6. Januar 2009
126
8
NRW
Hallo zusammen,

wünsche allen noch ein frohes neues und erfolgreiches Jahr 2024! 🎉

In der Produktliste, bzw. genauer gesagt in der {get_product_list}, benötige ich Zugriff auf die im Artikel hinterlegten X-Selling Gruppen ($Xselling->Standard->XSellGruppen).

Gibt es einen Weg diese an dieser Stelle anzusprechen?
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.701
1.612
Berlin
{get_product_list deine_Parameter='xyz' assign='meineDaten' }

dann machst du mal ein
{(array) $meine Daten|dump}

und siehst was da alles drin steht.
 

hii

Gut bekanntes Mitglied
6. Januar 2009
126
8
NRW
Vielen Dank…

Die Parameter hatte ich mir vorher mit {$Artikel|@debug_print_var} augegeben.

Mit dem angepassten {(array) $meine Daten|dump} ist es viel komfortabler, aber leider werden die Werte zu den Xselling hier leider auch nicht aufgeführt.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.701
1.612
Berlin
Die Frage ist,
was du denn für Daten erwartest, ich habe das jetzt nicht geprüft, aber in dem was da raus kommt sollten die Artikel stehen die get_product_list eben anhand deiner Parameter ausgelesen hat.
 

hii

Gut bekanntes Mitglied
6. Januar 2009
126
8
NRW
Im Grunde möchte ich an die Artikeldaten eines Artikels, der in einer bestimmten Xselling Gruppe vorhanden ist.
Ich möchte also eine bestimmte XSellGruppe abfragen um dann an einige Werte des vorhandenen Items aus der Gruppe zu gelangen (in der Gruppe ist immer nur ein Item vorhanden).

In der Produktdetailansicht habe ich es wie folgt lösen können:

Code:
{$xsellGroupRXready = 'false'}

{foreach $Xselling->Standard->XSellGruppen as $GruppenNamen}
    {if $GruppenNamen->Name == "RXready" && count($GruppenNamen->Artikel)==1}
        {$xsellGroupRXready = 'true'}
    {/if}                                   
{/foreach}

{if $xsellGroupRXready == 'true'}
    {if isset($Xselling->Standard->XSellGruppen) && count($Xselling->Standard->XSellGruppen) > 0}
        {foreach $Xselling->Standard->XSellGruppen as $Gruppe}                                       
            {if $Gruppe->Name == "RXready"}   
                {if count($Gruppe->Artikel)>0}
                    {if isset($Gruppe->Artikel) && count($Gruppe->Artikel)>0}
                        {foreach from=$Gruppe->Artikel item=oArtikel}
                            {assign var="ArtikelRXLink" value=$oArtikel->cURL}
                            {* Hier weitere Werte abfragen *}
                        {/foreach}
                    {/if}
                {/if}
            {/if}
        {/foreach}
    {/if} 
{/if}

Dies versuche ich in der Übersicht nachzubilden.
 

hii

Gut bekanntes Mitglied
6. Januar 2009
126
8
NRW
Vielleicht habe ich mich da etwas zu ungenau ausgedrückt.

Mal ganz konkret ein Beispiel was ich benötige:
Code:
{get_product_list kArtikel=3922 nLimit=1 cAssign="hohpListTopseller"}


{if $hohpListTopseller}


<div class="row product-list layout-gallery" id="product-list" >
    {foreach name=custom from=$hohpListTopseller item=Artikel}
    
        <div class="productbox-title" itemprop="name">
            {link href=$Artikel->cURLFull class="text-clamp-4 text-decoration-none-util"}
            <h2>
                {if !empty($Markenname)}<b>{$Markenname}</b> | {/if}  
                {if $Artikel->cKurzbezeichnung|count_characters <= 80}                                
                  {if !empty($pWarenmerkmal)}{$pWarenmerkmal} | {/if} 
                  {if !empty($pWarenart)}{$pWarenart} | {/if}                                    
                  {if !empty($pWareneigenschaft)}{$pWareneigenschaft} | {/if} 
                  {*if !empty($pWarenart_Additional)}{$pWarenart_Additional} | {/if*}
                {/if}                                    
                {$Artikel->cKurzbezeichnung}
            </h2>
            {/link}
        </div>
        
                                        
        {$xsellGroupRXready = 'false'}

        {foreach $Xselling->Standard->XSellGruppen as $GruppenNamen}
            {if $GruppenNamen->Name == "RXready" && count($GruppenNamen->Artikel)==1}
                {$xsellGroupRXready = 'true'}
            {/if}                                   
        {/foreach}


        {if $xsellGroupRXready == 'true'}
           {if isset($Xselling->Standard->XSellGruppen) && count($Xselling->Standard->XSellGruppen) > 0}
                {foreach $Xselling->Standard->XSellGruppen as $Gruppe}                                       
                    {if $Gruppe->Name == "RXready"}   
                        {if count($Gruppe->Artikel)>0}
                            {if isset($Gruppe->Artikel) && count($Gruppe->Artikel)>0}
                                {foreach from=$Gruppe->Artikel item=oArtikel}
                                    {assign var="ArtikelRXLink" value=$oArtikel->cURL}
                                    {$ArtikelRXLink}

                                    {* Hier weitere Werte abfragen und ausgeben *}

                                {/foreach}
                            {/if}
                        {/if}
                    {/if}
                {/foreach}
            {/if} 
        {/if}    
    
    {/foreach}    
</div>
{/if}

Hier wird mir im Bereich {if $xsellGroupRXready == 'true'} nichts ausgegeben, im Gegensatz zur Produkt Detail Seite des gleichen Produkts.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.701
1.612
Berlin
Weil du hier deine Xselling Gruppe auf 1 abfragst, da werden aber vermutlich mehrere drin stehen

count($GruppenNamen->Artikel)==1

|dump ist dein Freund schau es dir mal in der Schleife an
 

hii

Gut bekanntes Mitglied
6. Januar 2009
126
8
NRW
Hab ich jetzt auch noch einmal geprüft… Aber selbst wenn ich schlicht alles durchlaufen lasse, erhalte ich an dieser Stelle nichts bezgl. der Xsellings.

So wie ich das sehe, wird dein Test-Beispiel wir auf einer Produktdetailseite ausgeführt. Hier habe ich auch kein Problem, da funktioniert alles wie gewünscht.
Ich bin jedoch auf einer „nicht Produktdetailsseite“ unterwegs.
 

Anhänge

  • rxpossible.jpg
    rxpossible.jpg
    249,1 KB · Aufrufe: 1

hii

Gut bekanntes Mitglied
6. Januar 2009
126
8
NRW
Jetzt haben wir uns! 😀 Aber genau das benötige ich.

Sie mal als grobes Beispiel die Retusche (gelber Kasten) im Anhang.
 

Anhänge

  • plisting.jpg
    plisting.jpg
    236,5 KB · Aufrufe: 6

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.701
1.612
Berlin
im Listing, unter den Artikeln die zugehörigen oder spezielle zugehörige Xselling Produkte anzeigen?

Das ist mutig, weil du musst dann für jeden Artikel die xSelling gruppe holen, das kostet Zeit und stresst den Shop

ich hab das mal provisorisch gemacht, im letzten Artikel also beim Zubehör siehst du das xSelling das ich geholt habe, das müsstest du dann aber, so wie ich, über eine smarty Funktion holen die in deinem Child hinterlegt ist.

https://jtl53.dateispeicher.de/530/Plugins


Ich möchte aber nicht wissen wie das deinen Shop stressen wird wenn da mehrere 1000 Artikel mit vielen xSelling Gruppen vorhanden sind.
 

hii

Gut bekanntes Mitglied
6. Januar 2009
126
8
NRW
Du hast recht, ich hoffe auch dass die Last wird nicht zu groß wird. Da ich es aber nur in bestimmten Fällen benötige, wird es recht gezielt eingesetzt werden.

Würdest du mir verraten, wie du das hinbekommen hast?
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.701
1.612
Berlin
Ja ich kann dir das gerne zeigen aber es wie angesprochen nur provisorisch daher ohne Netz und doppeltem Boden

also, wir gehen davon aus das du ein Child Template hast
in der productlist/item_box habe ich jetzt das hier eingetragen

PHP:
{block name='productlist-item-box' append}
{cssFunction kArtikel=$Artikel->kArtikel}
{/block}

dann in der Bootstrap.php die du ja hast sieht es so aus, ich hab das oben mit dem Namespace weggelassen, du siehst hier nur die Sachen die du eben benötigst
in die Variable xSell schreibe ich dann das xSelling


Code:
use JTL\Shop;
use Smarty;
use JTL\Helpers\Product;

class Bootstrap extends \Template\NOVA\Bootstrap {

    public function boot(): void {
        parent::boot();
    }

    protected function registerPlugins(): void {
        parent::registerPlugins();
        $this->getSmarty()->registerPlugin(Smarty::PLUGIN_FUNCTION, 'cssFunction', [$this, 'cssFunction']);
    }


    public function cssFunction($params, $smarty) {
        $xsell = Product::getXSelling((int) $params['kArtikel'],true);
        $smarty->assign('xSell',$xsell);
    }

}


Das ist wirklich nur provisorisch und sollte nicht 1:1 in ein Live System übernommen werden.
 

hii

Gut bekanntes Mitglied
6. Januar 2009
126
8
NRW
Getestet wir bei mir immer nur in einem DEV Bereich. Ich möchte mich bei dir bedanken!

Hab‘s kurz probiert aber es reagiert noch nicht bei mir. Morgen werde ich mich mit frischen Kopf noch einmal dran setzten und berichten.
 

hii

Gut bekanntes Mitglied
6. Januar 2009
126
8
NRW
Guten Morgen,

auch mit frischen Kopf, bekomme ich leider keine Daten über die $xsell. Sämtliche Caches wurden mehrfach geleert.
Habe ich vielleicht einen Fehler bei der Datenübernahme gemacht, den ich nicht erkenne?
 

Anhänge

  • xsell.jpg
    xsell.jpg
    272,8 KB · Aufrufe: 2