# bestimmte Kategorie als Listing ausgeben

**URL:** <https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309>\
**Category:** Shopware 3.5\
**Tags:** themes--design\
**Created:** [12. Dezember 2013 um 08:39 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309 "2013-12-12T08:39:44Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![VolkerSchroder](https://avatars.discourse-cdn.com/v4/letter/v/4da419/32.png) [@VolkerSchroder](https://forum.shopware.com/u/VolkerSchroder)\
**Post date:** [12. Dezember 2013 um 08:39 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/1 "2013-12-12T08:39:44Z")

</div>

Ich möchte bei speziellen Artikeln ein zusätzliches TAB einfügen und dort alle Artikel einer definierten Kategorie ausgeben. Ähnlich wie das related.tpl mit Zubehör Artikeln macht: [quote]{if $sArticle.sRelatedArticles && !$sArticle.crossbundlelook}

## {se name=‚DetailRelatedHeader‘}{/se}

{foreach from=$sArticle.sRelatedArticles item=sArticleSub key=key name=„counter“} {include file=„frontend/listing/box\_article.tpl“ sArticle=$sArticleSub sTemplate=‚listing‘} {/foreach}

&nbsp;

{/if}[/quote] Also im Prinzip: {foreach from=$sCategorie… aber wie kann ich dann die Kategorie definieren? Die ID bekomme ich über das Backend, aber wie und wo setz ich die hinter $sCategorie ?

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [12. Dezember 2013 um 21:13 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/2 "2013-12-12T21:13:07Z")

</div>

hi, dazu kannst du dir ein kleines Plugin schreiben. hier mal ein kleines snippet auf Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Detail ` public function onPostDispatchFrontendDetail(Enlight\_Event\_EventArgs $args) { /\*\* @var $action Enlight\_Controller\_Action \*/ $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); // Load this code only in frontend if(!$request-\>isDispatched() || $response-\>isException() || ($request-\>getModuleName()!='frontend' && $request-\>getModuleName()!="widgets")) { return; } if ($args-\>getSubject()-\>View()-\>hasTemplate()){ $args-\>getSubject()-\>View()-\>alternativeArticles = Shopware()-\>Modules()-\>Articles()-\>sGetArticlesByCategory(74); } } ` hier musst du natürlich deine Category-ID eintragen. und dann in deinem Tab zb so etwas: ` {foreach from=$alternativeArticles.sArticles item=sArticle key=key name=list} {include file='frontend/listing/box\_article.tpl' sTemplate='listing'} {/foreach} `

---

<div class="post-metadata">

**Author:** ![VolkerSchroder](https://avatars.discourse-cdn.com/v4/letter/v/4da419/32.png) [@VolkerSchroder](https://forum.shopware.com/u/VolkerSchroder)\
**Post date:** [12. Dezember 2013 um 23:19 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/3 "2013-12-12T23:19:53Z")

</div>

@hbee ups, das ist ja doch etwas aufwendiger als gedacht… nunja, hab mich mal durch die Plugin Entwicklung gelesen und auch soweit installiert bekommen. Die Kategorie ID hab ich angepasst. Produkte sind auch in der Kategorie 😉 …aber irgendwie bleibt alles leer…☹ so sieht es im Moment aus: `<?php class Shopware_Plugins_Frontend_VSmotorlager_Bootstrap 
    extends Shopware_Components_Plugin_Bootstrap
{
    public function getCapabilities()
    {
        return array(
            'install' => true, 'update' =\> true, 'enable' =\> true ); } public function getLabel() { return 'Artikel einer gewissen Kategorie ausgeben'; } public function getVersion() { return '1.0.0'; } public function getInfo() { return array( 'version' =\> $this-\>getVersion(), 'label' =\> $this-\>getLabel(), 'supplier' =\> 'Volker Schröder', 'description' =\> 'Auslesen aller Artikel einer angegebenen Kategorie', 'support' =\> 'Volker Schröder', 'link' =\> 'http://www.myshop.de' ); } public function install() { return true; } public function onPostDispatchFrontendDetail(Enlight\_Event\_EventArgs $args) { /\*\* @var $action Enlight\_Controller\_Action \*/ $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); // Load this code only in frontend if(!$request-\>isDispatched() || $response-\>isException() || ($request-\>getModuleName()!='frontend' && $request-\>getModuleName()!="widgets")) { return; } if ($args-\>getSubject()-\>View()-\>hasTemplate()){ $args-\>getSubject()-\>View()-\>MotorlagerArticles = Shopware()-\>Modules()-\>Articles()-\>sGetArticlesByCategory(1189); } } } ` `{foreach from=$MotorlagerArticles.sArticles item=sArticle key=key name=list} {include file='frontend/listing/box\_article.tpl' sTemplate='listing'} {/foreach}` Noch ne “Kleinigkeit” wie kann ich die ID als Variabel mit an das Plugin übergeben? …ich bräuchte den Aufruf dann mit unterschiedlichen Kategorien 😉

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [13. Dezember 2013 um 00:09 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/4 "2013-12-13T00:09:19Z")

</div>

du hast vergessen dich für das Event zu registrieren. du musts noch folgendes in deine install methode einfügen ` $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Detail', 'onPostDispatchFrontendDetail' ); `

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [13. Dezember 2013 um 00:13 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/5 "2013-12-13T00:13:02Z")

</div>

wenn du die Kategorie-ID über die Config eintragen willst, brauchst du eine Konfigurationsformular ` $form = $this-\>Form(); $form-\>setElement('text', 'cat-id', array( 'label' =\> 'Kategorie-ID', 'description' =\> 'Tragen sie hier die Kategorie-ID ein.', 'required'=\>true, 'scope' =\> \Shopware\Models\Config\Element::SCOPE\_SHOP )); ` darauf kannst du dann wie folgt zugreifen: ` $this-\>Config = Shopware()-\>Plugins()-\>Frontend()-\>VSmotorlager()-\>Config(); $catID = $this-\>Config-\>get('cat-id'); `

---

<div class="post-metadata">

**Author:** ![VolkerSchroder](https://avatars.discourse-cdn.com/v4/letter/v/4da419/32.png) [@VolkerSchroder](https://forum.shopware.com/u/VolkerSchroder)\
**Post date:** [13. Dezember 2013 um 09:03 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/6 "2013-12-13T09:03:53Z")

</div>

@hbee Ich habe den Code bei install eingefügt und über Plugin neu installiert…ändert aber irgendwie nix ☹ Mit der Variabel hab ich mich etwas missverständlich ausgedrückt. Ich möchte die nicht in einem Formular eingeben, sondern über die „foreach“ Abfrage an das Plugin übergeben.

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [13. Dezember 2013 um 09:46 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/7 "2013-12-13T09:46:35Z")

</div>

ok, also hier eine fertige bootstrap die dir am Ende die Variable $alternativeArticles auf der Detailseite zur Verfügung stellt. Diese Variable kannst du dann im Template wie folgt in einer Schleife durchlaufen: ` {foreach $alternativeArticles.sArticles as $sArticle} {include file="frontend/listing/box\_article.tpl" sTemplate=$sTemplate lastitem=$sArticle@last firstitem=$sArticle@first} {/foreach} ` Die gewünschte Kategorie-Id kannst du damit in dem Freitextfeld 1 in dem jeweiligen Artikel angeben. Wenn du ein anderes Freitextfeld nutzen möchtest, musst du die folgende Zeile im Code entsprechend ändern: `$catId = $sArticle['attr1'];` Mehr kann ich zu dem Thema hier nicht liefern 😉 Bootstrap.php [code]\<?php /\*\*

- Bootstrap
- 
- @category Shopware
- @package Maxout\_Plugins
- @subpackage Plugin
- @author Heiko Bee [plugins@maxout.de](mailto:plugins@maxout.de) \* @copyright Copyright © 2013, [maxout.de](http://maxout.de), Heiko Bee \*/ class Shopware\_Plugins\_Frontend\_MaxoutAlternativeArticles\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { /\*\* \* Installs the plugin \* \* @return bool \*/ public function install() { /\*\* \* Creates and subscribe the events and hooks. \*/ $this-\>subscribeEvent( ‘Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Detail’, ‘onPostDispatchFrontendDetail’ ); return TRUE; } /\*\* \* Updates the plugin \* \* @param $oldVersion \* @return bool \*/ public function update($oldVersion) { return TRUE; } /\*\* \* Event listener method \* \* @param Enlight\_Event\_EventArgs $args \*/ public function onPostDispatchFrontendDetail(Enlight\_Event\_EventArgs $args) { /\*\* @var $action Enlight\_Controller\_Action \*/ $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); $subject = $args-\>getSubject(); // Load this code only in frontend if(!$request-\>isDispatched() || $response-\>isException() || ($request-\>getModuleName()!=‘frontend’ && $request-\>getModuleName()!=“widgets”)) { return; } if ($args-\>getSubject()-\>View()-\>hasTemplate()){ $view = $subject-\>View(); $sArticle = $view-\>getAssign(‘sArticle’); //Freitextfeld zur Angabe der Kategorie-ID $catId = $sArticle[‘attr1’]; if(!empty($catId)) $args-\>getSubject()-\>View()-\>alternativeArticles = Shopware()-\>Modules()-\>Articles()-\>sGetArticlesByCategory($catId); } } /\*\* \* Returns the label of the plugin as string \* \* @return string \*/ public function getLabel() { return ‘Alternative Artikel auf der Detailseite’; } /\*\* \* Returns the version of plugin as string. \* \* @return string \*/ public function getVersion() { return ‘1.0.0’; } /\*\* \* Returns plugin Information. \* \* @return array \*/ public function getInfo() { return array( ‘version’ =\> $this-\>getVersion(), ‘autor’ =\> ‘Heiko Bee’, ‘copyright’ =\> ‘Copyright © 2013, [maxout.de](http://maxout.de), Heiko Bee’, ‘label’ =\> $this-\>getLabel(), ‘source’ =\> ‘’, ‘description’ =\> ‘Dieses Plugin stellt auf der Detailseite alternative Artikel aus einer zu definierenden Kategorie bereit.’, ‘license’ =\> ‘’ ); } } [/code]

---

<div class="post-metadata">

**Author:** ![VolkerSchroder](https://avatars.discourse-cdn.com/v4/letter/v/4da419/32.png) [@VolkerSchroder](https://forum.shopware.com/u/VolkerSchroder)\
**Post date:** [13. Dezember 2013 um 18:59 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/8 "2013-12-13T18:59:18Z")

</div>

@hbee Suuuuuuuuuper Weihnachtsgeschenk 🙂 Vielen Dank :):)🙂 Klappt perfekt. ------- eine “Kleinigkeit” noch: kann ich die “catID” als Variable direkt aus dem Template an die PHP Datei übergeben? Hab das schon hiermit versucht…geht aber nicht: $myVar = $smarty-\>getTemplateVars(‘foo’); PS: darf natürlich auch von allen anderen beantwortet werden 🙂

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [13. Dezember 2013 um 21:27 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/9 "2013-12-13T21:27:01Z")

</div>

wie man Variablen aus dem Template in der Bootstrap verwendet steht doch schon da: ` $sArticle = $view-\>getAssign('sArticle'); ` Das sollte auch mit deiner $foo klappen.

---

<div class="post-metadata">

**Author:** ![VolkerSchroder](https://avatars.discourse-cdn.com/v4/letter/v/4da419/32.png) [@VolkerSchroder](https://forum.shopware.com/u/VolkerSchroder)\
**Post date:** [13. Dezember 2013 um 22:16 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/10 "2013-12-13T22:16:02Z")

</div>

@hbee jo stimmt. steht drin 🕶 ------- auch wenn ich nervig bin…dann sollte es doch so gehen…: im Template hab ich {$catId=1189} in der Bootstrap müsste ich dann doch mit $catId = $view-\>getAssign(‚catId‘); die catID= 1189 setzen können. geht aber nicht…aber genauso hast Du es doch auch mit sArticles gemacht…oder? Wenn ich die 1189 in ein Attribut schreibe und Deinen Code nehme, dann klappt es. \*grübel\*

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [13. Dezember 2013 um 22:52 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/11 "2013-12-13T22:52:02Z")

</div>

ok, getAssign funktioniert nicht mit Variablen die erst im Template erstellt werden. Die müssen dazu wohl schon in der indexAction des Controllers erstellt worden sein. Warum willst du die Cat-ID denn im Template setzen? Wird sie dort irgend wie dynamisch erzeugt? ansonsten macht das doch keinen sinn.

---

<div class="post-metadata">

**Author:** ![VolkerSchroder](https://avatars.discourse-cdn.com/v4/letter/v/4da419/32.png) [@VolkerSchroder](https://forum.shopware.com/u/VolkerSchroder)\
**Post date:** [13. Dezember 2013 um 23:04 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/12 "2013-12-13T23:04:03Z")

</div>

Ich hab ne Abfrage von diversen Herstellern, je nach Hersteller werden diverse tabs mit FAQ etc. gefüllt und meine Idee war hier auch die entsprechende Kategorie, die herstellerbezogen ist zu nutzen. Lg Volker

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [13. Dezember 2013 um 23:09 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/13 "2013-12-13T23:09:24Z")

</div>

aber den Hersteller hast du ja auch in den Artikel-Daten – da kommst du ja ran. Reicht dir das nicht? Die Abfrage kannst du dann ja auch in der Bootstrap machen. Ansonsten hab ich da jetzt auch keine Lösung für parat, auch wenn bald Weihnachten ist 😉

---

<div class="post-metadata">

**Author:** ![VolkerSchroder](https://avatars.discourse-cdn.com/v4/letter/v/4da419/32.png) [@VolkerSchroder](https://forum.shopware.com/u/VolkerSchroder)\
**Post date:** [14. Dezember 2013 um 23:04 UTC](https://forum.shopware.com/t/bestimmte-kategorie-als-listing-ausgeben/17309/14 "2013-12-14T23:04:14Z")

</div>

Jo. Hast recht. Natürlich… Hab ich jetzt auch so gemacht 🙂 Wir stecken in den letzten Zügen unserer WAWI (erp-complete)und shopware Umstellung, da fehlt manchmal der klare Gedanke. Danke nochmal 🙂 Lg Volker
