Aktion mit Artikeln und Kategorien

Ich möchte in der Aktion Angebot der Woche zusätzlich noch eine Kategorie anzeigen. Zuordnen lassen sich allerdings nur Artikel. Geht das trotzdem? Gibt es da einen Trick?
Notfalls programmiere ich das in die .tmp mit rein, eleganter wäre aber natürlich ein offizieller weg über das Backend :slight_smile:

Was genau willst du damit bewirken?

Ja, klar. Da hat man das klar und eindeutig im Kopf und vergisst einfach, wichtige Details mitzuteilen…

Also ich habe einige Artikel, die ganz normal dargestellt werden. Sagen wir Schokolade und Popcorn. Allerdings sollen auch noch Gummibärchen dabei sein - hier gibt es allerdings 50 verschiedene Sorten. Deshalb soll bei den Gummibärchen einfach auf die Kategorie verwiesen werden.
Wenn ich alle Gummibärchen Sorten einstellen würde, wären das zum einen sehr viele Artikel, zum anderen würde auch die Wichtung Schokolade - Popcorn - Gummibärchen zu gunsten der Gummibärchen kippen.
Nur ein Beispiel, aber vielleicht wird meine Intension damit klarer :slight_smile:

also eifnach nur um die Kategore statt eines bestimmten Artikels zu verlinken. verstehe ich.
Out of the Box kann OXID das nicht. Aber es gibt da eine Aktion “Kategorien-Topangebot”, diese wurde früher im Azure Theme verwendet, um direkt neben den Top-Angeboten irgendeine eine Kategorie auf der Startseite zu bewerben.
Aus dem aktuellen Flow/Wave Theme ist dieser Code leider rausgeflogen, aber die Aktion und dazugeörige Funktion sind im PHP Code immer noch vorhanden.
Vielleicht kannst du den Code von Azure bei dir verwenden:

1 Like

Ah, gute Info. Das schaue ich mir mal an, vielleicht fällt mir hier waselegantes ein :slight_smile:

Wäre toll, wenn Du das dann hier teilen könntest, @Matze66 :wink:

@marco.steinhaeuser sowieso :wink:

Mein Ansatz wäre:
Ich lege einen neuen Artikel an, der aktiv und versteckt ist (dann komme ich mit der normalen Darstellung nicht ins Gehege) und weise dem eine Kategorie zu.
Den Artikel lege ich dann in die Aktion “Angebot der Woche”
In der start.tpl rufe ich beim Block start_bargain_articles die widget/product/list_cat.tpl auf (erst einmal ist das eine Kopie der list.tpl). Hier unterscheide ich dann, ob der Artikel versteckt ist (dann Kategorie anzeigen) oder normal (dann den Artikel anzeigen).
Allerdings werden die versteckten Produkte ja nicht aufgelistet - sprich ich muss noch irgendeine Funktion/Objekt anpassen. Da hänge ich gerade, bzw. suche, wo es steht. Ich dachte eigentlich, ich finde es in der oxid-esales/oxideshop-ce/source/Application/Model/ArticleList.php::loadActionArticles() aber entweder ich sehe es nicht, oder die versteckten Artikel werden an anderer Stelle ausgebendet…
Vielleicht hast Du ja da einen Tipp :slight_smile:

1 Like

So, meine schnelle, aber halbwegs hübsche Zwischenlösung:
Da ich in dem Fall tatsächlich nur eine Kategorie brauche, die angezeigt wird, nehme ich mehr oder weniger den Mechanismus vom Azur-Theme. Allerdings baue ich das nicht in die start.tpl ein, sondern in die list.tpl. Dann werden die Produkte/Kategorie auch halbwegs sauber angezeigt (die Ausgabe habe ich etwasangepasst)…

Ich habe mal versucht, hier die eingefügten Bereiche zu zeigen. Wer einen Tip hat, wie ich quellcode sinnvoll markieren/hervorheben kann…

list.tpl

[{if !$type}]
[{assign var=“type” value=“infogrid”}]
[{/if}]

[{if !$iProductsPerLine}]
[{assign var=“iProductsPerLine” value=4}]
[{/if}]

[{if $type == ‘infogrid’}]
[{assign var=“iProductsPerLine” value=2}]
[{elseif $type == ‘grid’}]
[{assign var=“iProductsPerLine” value=4}]
[{elseif $type == ‘line’}]
[{assign var=“iProductsPerLine” value=1}]
[{/if}]

[{if $head}] [{if $header == "light"}]
[{$head}]
            [{if $subhead}]
                <small class="subhead">[{$subhead}]</small>
            [{/if}]
        </div>
    [{else}]
        <div class="page-header">
            <h2>
                [{$head}]
                [{if $rsslink}]
                    <a class="rss" id="[{$rssId}]" href="[{$rsslink.link}]" target="_blank">
                        <i class="fa fa-rss"></i>
                    </a>
                [{/if}]
            </h2>

            [{if $subhead}]
                <small class="subhead">[{$subhead}]</small>
            [{/if}]
        </div>
    [{/if}]
[{/if}]
[{* Vom ersten Artikel der Aktion 'Kategorien-Topangebot' die Kategorie holen *}]
	[{if $oView->getCatOfferArticleList()|@count > 0}]
		[{foreach from=$oView->getCatOfferArticleList() item=actionproduct name=CatArt}]
		[{if $smarty.foreach.CatArt.first}]
			[{assign var="oCategory" value=$actionproduct->getCategory()}]
			[{if $oCategory}]
				[{assign var="promoCatTitle" value=$oCategory->oxcategories__oxtitle->value}]
				[{assign var="promoCatImg" value=$oCategory->getPromotionIconUrl()}]
				[{assign var="promoCatLink" value=$oCategory->getLink()}]
			[{/if}]
		[{/if}]
		[{/foreach}]
	[{/if}]
...

[{assign var=“productsCount” value=$products|@count}]

[{* Wenn es eine Kategorie gibt, den Produktzähler um 1 erhöhen *}] 
[{if $promoCatTitle && $promoCatImg}]
    		[{assign var="productsCount" value=$productsCount+1}]
[{/if}]
...

[{if $productsCount gt 0}]
[{math equation=“x / y” x=12 y=$iProductsPerLine assign=“iColIdent”}]

    <div class="list-container" id="[{$listId}]">
        [{foreach from=$products item="_product" name="productlist"}]
            [{counter print=false assign="productlistCounter"}]
            [{assign var="testid" value=$listId|cat:"_"|cat:$smarty.foreach.productlist.iteration}]

            [{if $productlistCounter == 1}]
                <div class="row [{$type}]View newItems">
            [{/if}]

            <div class="productData col-xs-12[{if $type != 'line'}] col-sm-6 col-md-[{$iColIdent}][{/if}] productBox">
                [{oxid_include_widget cl="oxwArticleBox" _parent=$oView->getClassName() nocookie=1 _navurlparams=$oViewConf->getNavUrlParams() iLinkType=$_product->getLinkType() _object=$_product anid=$_product->getId() sWidgetType=product sListType=listitem_$type iIndex=$testid blDisableToCart=$blDisableToCart isVatIncluded=$oView->isVatIncluded() showMainLink=$showMainLink recommid=$recommid owishid=$owishid toBasketFunction=$toBasketFunction removeFunction=$removeFunction altproduct=$altproduct inlist=$_product->isInList() skipESIforUser=1 testid=$testid}]
            </div>

            [{if $productlistCounter%$iProductsPerLine == 0 || $productsCount == $productlistCounter}]
                </div>
            [{/if}]

            [{if $productlistCounter%$iProductsPerLine == 0 && $productsCount > $productlistCounter}]
                <div class="row [{$type}]View newItems">
            [{/if}]
        [{/foreach}]
[{* Kategorie ausgeben, wenn Name und Bild vorhanden sind *}]
[{if $promoCatTitle && $promoCatImg}]
   <div style="text-align:center" class="productData col-xs-12[{if $type != 'line'}] col-sm-6 col-md-[{$iColIdent}][{/if}] productBox">
   <div class="picture text-center" style="padding:20px"><img src="[{$promoCatImg}]" alt="[{$promoCatTitle}]"></div>
   <div class="title">[{$promoCatTitle}]</div>
   <a class="btn btn-primary" href="[{$promoCatLink}]"><span>[{oxmultilang ident="VIEW_ALL_PRODUCTS"}]</span></a>
    </div>
[{/if}]
...

[{* Counter resetten *}]
[{counter print=false assign=“productlistCounter” start=0}]

[{/if}]

2 Likes