# Artikel anhand der Artikelnummer finden

**URL:** <https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [1. März 2013 um 14:05 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907 "2013-03-01T14:05:12Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![goliat-werbeagentur](https://avatars.discourse-cdn.com/v4/letter/g/ec9cab/32.png) [@goliat-werbeagentur](https://forum.shopware.com/u/goliat-werbeagentur)\
**Post date:** [1. März 2013 um 14:05 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/1 "2013-03-01T14:05:12Z")

</div>

Hallo liebe Community, habe eine Frage: Ich habe pro Artikel (Hauptartikel genannt) ein Textfeld, in welches man Artikelnummern anderer Artikel reinschreiben soll. (im Backend bei den Stammdaten). Nun möchte ich, dass bestimmte Dinge (z.B. das Bild) dieser einzelnen Artikel auf meinem Hauptartikel erscheinen. Momentan kann ich zwar die einzelnen Artikelnummern auslesen, weiß leider aber nicht, wie ich mit denen nun weiter verfahren soll. {\* Kabinen Ausstattung \*} {block name=‚kabinen\_ausstattung‘} {$Ausstattung = explode(’|’,$sArticle.attr4,20)} {$Ausstattung[1]} {/block}

---

<div class="post-metadata">

**Author:** ![goliat-werbeagentur](https://avatars.discourse-cdn.com/v4/letter/g/ec9cab/32.png) [@goliat-werbeagentur](https://forum.shopware.com/u/goliat-werbeagentur)\
**Post date:** [1. März 2013 um 14:17 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/2 "2013-03-01T14:17:01Z")

</div>

Falls nicht ganz verständlich ist, was ich meine, bitte fragt nach.

---

<div class="post-metadata">

**Author:** ![goliat-werbeagentur](https://avatars.discourse-cdn.com/v4/letter/g/ec9cab/32.png) [@goliat-werbeagentur](https://forum.shopware.com/u/goliat-werbeagentur)\
**Post date:** [1. März 2013 um 15:00 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/3 "2013-03-01T15:00:29Z")

</div>

mein Ansatz ist dieser: (wahrscheinlich aber sehr fehlerhaft) ` {\* Kabinen Ausstattung \*} {block name='kabinen\_ausstattung'} {$gefundeneArtikel = []} {$Ausstattung = explode('|',$sArticle.attr4,20)} {foreach from=$sArticle item=offer name="counter"} {foreach from=$Ausstattung item=offer name="counter2"} {if $sArticle.ordernumber == $Ausstattung} {array\_push($gefundeneArtikel,$sArticle)} {/if} {/foreach} {/foreach} {count($gefundeneArtikel)} {/block}`

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [1. März 2013 um 15:04 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/4 "2013-03-01T15:04:42Z")

</div>

Ich hab gerade keinen Rechner mit installierter Shopware zur Hand, aber so aus dem Kopf (falls du mit Artikelnummern die Bestellnummern meinst): ` $articleDetailRepostiory = Shopware()-\>Models()-\>getRepository('Shopware\Models\Article\Detail'); $articleDetail = $articleDetailRepostiory-\>findOneBy(array('ordernumber' =\> 'SW10003')); $article = $articleDetail-\>getArticle(); ` Was dahinter steckt ist, dass die Ordernummer in den Artikeldetails abgebildet ist; der eigentliche Artikel ist dann eben über den Getter erreichbar.

---

<div class="post-metadata">

**Author:** ![goliat-werbeagentur](https://avatars.discourse-cdn.com/v4/letter/g/ec9cab/32.png) [@goliat-werbeagentur](https://forum.shopware.com/u/goliat-werbeagentur)\
**Post date:** [1. März 2013 um 15:15 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/5 "2013-03-01T15:15:52Z")

</div>

Jetzt würde aber nur ein Artikel ausgegeben mit eben der entsprechend vordefinierten Bestellnummer. Wie kann ich jetzt jeden Artikel anzeigen, welcher eine Bestellnummer aus einem Array besitzt, anzeigen?

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [1. März 2013 um 15:47 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/6 "2013-03-01T15:47:43Z")

</div>

Da müsstest du dir einen Query zusammen bauen. So in der Art: ` $qb-\>select('articleDetails') -\>from('Shopware\Models\Article\Detail', 'articleDetails') -\>where('articleDetails.ordernumber IN (:ordernumbers)') -\>setParameter('ordernumbers', array( ... )); ` Den QueryBuilder kriegst du auf verschiedene Arten. Entweder du erweiterst das Repository oder schreibst ein eigenes. Am einfachsten wäre es so: ` $qb = Shopware()-\>Models()-\>createQueryBuilder() ` (Hab ich jetzt alles nicht getestet, schau mal in den Shopware Quellcode, da findest du in den Repostories viele Beispiele).

---

<div class="post-metadata">

**Author:** ![goliat-werbeagentur](https://avatars.discourse-cdn.com/v4/letter/g/ec9cab/32.png) [@goliat-werbeagentur](https://forum.shopware.com/u/goliat-werbeagentur)\
**Post date:** [1. März 2013 um 15:51 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/7 "2013-03-01T15:51:23Z")

</div>

Wäre diese Abfrage auch innerhalb einer Smarty foreach Schleife machbar? Weil ich das Ganze direkt in einen Block in die description.tpl schreiben möchte. Bzw. ich hätte dann wiederum die Frage, wie ich eingetragenen Bestellnummern als Array dem PHP übergeben kann. Denn momentan funktioniert das Auslesen so: `{$Ausstattung = explode('|',$sArticle.attr4,20)}`

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [1. März 2013 um 16:11 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/8 "2013-03-01T16:11:26Z")

</div>

Das ginge wahrscheinlich mit viel bösem Willen und Gefrickel schon, aber Smarty ist eine Templating Engine und da hat das eigentlich nichts zu suchen …

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [1. März 2013 um 16:13 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/9 "2013-03-01T16:13:19Z")

</div>

Wenn du nur die Ordernummern haben willst, kannst du das ja im select angeben (‘articleDetails.ordernumber’), der QueryBuilder gibt eh schon einen Array zurück.

---

<div class="post-metadata">

**Author:** ![goliat-werbeagentur](https://avatars.discourse-cdn.com/v4/letter/g/ec9cab/32.png) [@goliat-werbeagentur](https://forum.shopware.com/u/goliat-werbeagentur)\
**Post date:** [1. März 2013 um 16:17 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/10 "2013-03-01T16:17:57Z")

</div>

Also ich habe gegeben nur die Artikelnummern (möchte diese also nicht auslesen), da diese in ein Textfeld reingeschrieben werden. Was ich möchte ist, dass verschiedene Daten der dazugehörigen Artikel angezeigt werden.

---

<div class="post-metadata">

**Author:** ![goliat-werbeagentur](https://avatars.discourse-cdn.com/v4/letter/g/ec9cab/32.png) [@goliat-werbeagentur](https://forum.shopware.com/u/goliat-werbeagentur)\
**Post date:** [1. März 2013 um 16:21 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/11 "2013-03-01T16:21:24Z")

</div>

Wenn ich jetzt natürlich eine PHP Datei in einen Block einfügen könnte, so könnte ich ja dann mit einer solchen Abfrage arbeiten. Aber wie übergebe ich dann den Aktuellen Artikel sodass man das Array mit den Artikelnummern aus dem attr14 überhaupt erstellen kann?

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [1. März 2013 um 16:23 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/12 "2013-03-01T16:23:08Z")

</div>

Ja, das verstehe ich schon. Aber die Daten, die du gerne hättest liegen eben in der Datenbank und über der Datenbank liegt in Shopware 4 ein Persistenzframework namens Doctrine. Wenn du es ordentlich machen willst, musst du der MVC Struktur folgen. Wenn du da keine Lust drauf hast kannst du das natürlich über einen PHP Block in smarty mit mysql\_connect in einen blink-Tag rendern … Ist halt nicht so doll.

---

<div class="post-metadata">

**Author:** ![goliat-werbeagentur](https://avatars.discourse-cdn.com/v4/letter/g/ec9cab/32.png) [@goliat-werbeagentur](https://forum.shopware.com/u/goliat-werbeagentur)\
**Post date:** [1. März 2013 um 16:33 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/13 "2013-03-01T16:33:59Z")

</div>

Naja es geht mir weniger um die Lust, als mehr um das Verständnis 😉 Wenn ich eine saubere Lösung erzielen kann, dann ist mir das natürlich lieber.

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [1. März 2013 um 16:38 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/14 "2013-03-01T16:38:34Z")

</div>

Dann erzähl doch mal etwas mehr was du machen willst. Erweiterst du was bestehendes oder schreibst du eine eigene Erweiterung?

---

<div class="post-metadata">

**Author:** ![goliat-werbeagentur](https://avatars.discourse-cdn.com/v4/letter/g/ec9cab/32.png) [@goliat-werbeagentur](https://forum.shopware.com/u/goliat-werbeagentur)\
**Post date:** [1. März 2013 um 16:47 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/15 "2013-03-01T16:47:06Z")

</div>

Also es ist so: was ich erzielen möchte (nämlich eine ähnliche Funktion wie das Cross selling nur ohne Preisberechnung und Warenkorb) ist ja klar soweit? Wie ich da jetzt aber hinkomme weiß ich selber nicht, da ich dahingehend relativ am Anfang meiner Entwicklung stehe. Es muss also in irgendeiner Art und Weise möglich sein, die Artikel, dessen Artikelnummer in einem bestimmten Artikel eingetragen werden (nämlich in ein Textfeld), bei eben diesem Artikel angezeigt werden. Ich ging davon aus, dass das Ganze eine relativ kleine Sache ist. Ich brauche ja nur die Artikel, welche zu den Artikelnummern gehören, und füge deren Inhalte mittels einer For-Schleife ein. Aber was wäre dafür die einfachste Variante?

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [1. März 2013 um 17:38 UTC](https://forum.shopware.com/t/artikel-anhand-der-artikelnummer-finden/11907/16 "2013-03-01T17:38:28Z")

</div>

Hast du dir mal die Tutorials durchgelesen? Da steht eigentlich alles drin, wenn du ein kleines Plugin schreiben willst. Leg doch erstmal eine Bootstrap.php an, wie im Tutorial beschrieben, zieh da die Daten, hook dich an ein Event (also immer do wo du angezeigt werden willst) und übergeb die Daten aus deiner Bootstrap Datei an dein Template. Das ist recht straightforward und da gibts auch Beispiele in den Doks zu. Wenn dein Plugin wächst, verlagerst du dann Code aus deiner Bootstrap Datei in dedizierte Klassen. Poste dann mal, was du so hast. Eine Alternative zu einem Plugin wäre, dass du einen ViewHelper für Smarty schreibst, wo du den Code abfeierst und den dann in deinem Template includierst. Das hab ich in shopware aber auch noch nicht gemacht, würde mich aber interessieren.
