# sGetArticleByID

**URL:** <https://forum.shopware.com/t/sgetarticlebyid/2816>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [16. Mai 2011 um 13:49 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816 "2011-05-16T13:49:55Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [16. Mai 2011 um 13:49 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/1 "2011-05-16T13:49:55Z")

</div>

Hey, was läuft schief, wenn bei der Aufruf von sGetArticleById nur folgendes zurück kommt: ` array( ['instock'] =\> FALSE ... ['crossbundlelook'] =\> FALSE ... ) ` Normalerweise sollten ja alle Eigenschaften des Artikels in dem Array stehen. Danke

---

<div class="post-metadata">

**Author:** ![ronecker](https://avatars.discourse-cdn.com/v4/letter/r/d2c977/32.png) [@ronecker](https://forum.shopware.com/u/ronecker)\
**Post date:** [17. Mai 2011 um 03:01 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/2 "2011-05-17T03:01:34Z")

</div>

Hi, das ist ja die zentrale Funktion über die Artikeldaten geladen werden. Ohne mehr zu wissen ist mein bester Tip das Du versucht den Artikel über seine Bestellnummer zu laden und nicht über die ArticleID. Du kannst Die Bestellnummer in die ArticleID mit dem Befehl sGetArticleIdByOrderNumber($ordernumber) übersetzen. Die Funktion ist ebenfalls in sArticle zu finden.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [17. Mai 2011 um 07:51 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/3 "2011-05-17T07:51:04Z")

</div>

Morgen Ronecker, danke für deine AW. Nein, es wird definitiv die ArtikelId verwendet. Das habe ich schon geprüft. Das Plugin läuft auch bei anderen Shops und auch bei Subshops, nur mit diesem einen Shop habe ich dieses Probleme.

---

<div class="post-metadata">

**Author:** ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)\
**Post date:** [17. Mai 2011 um 08:02 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/4 "2011-05-17T08:02:30Z")

</div>

Dann musst du wohl oder übel ein wenig debuggen - ich würde mich Step by Step durch die Funktion arbeiten und prüfen, wo er aussteigt. Das wird wahrscheinlich ein banales Problem sein, aber eine mögliche Ursache fällt mir so spontan auch nicht ein.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [17. Mai 2011 um 08:11 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/5 "2011-05-17T08:11:23Z")

</div>

Morgen Stefan, ich habe hier mal debuggt ` public function indexAction() { $id = intval($this-\>Request()-\>id); $mode = strval($this-\>Request()-\>mode); var\_dump($id); $article = Shopware()-\>Modules()-\>Articles()-\>sGetArticleById($id); var\_dump($article); $this-\>View()-\>a = $article; ... ... ` in $id steht die ID des Articles, diese habe ich mir zur Laufzeit ausgeben lassen. in $article bekomme ich dann eben nur die im ersten Posting bereits geschriebene Werte. Ausgabe: ` int(76) array(2) { ["instock"]=\> bool(false) ["crossbundlelook"]=\> bool(false) } ` Was könnte ich noch debuggen? Mehr Möglichkeiten habe ich ja gar nicht, oder?

---

<div class="post-metadata">

**Author:** ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)\
**Post date:** [17. Mai 2011 um 10:29 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/6 "2011-05-17T10:29:04Z")

</div>

Ich vermute das der den Artikel mit der übergebenen ID nicht findet - schau mal in die Funktion selbst - dort wird ja eine SQL-Query ausgeführt und die liefert bei dem von dir übergebenen Artikel kein Ergebnis zurück. Also läuft irgendein Join aus dieser Query ins leere - sprich der Artikel ist vermutlich nicht vollständig angelegt, oder nicht aktiv, oder gesperrt etc.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [17. Mai 2011 um 12:00 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/7 "2011-05-17T12:00:47Z")

</div>

Okay, ich habe mir nun mal die Query von sGetArticleById ausgeben lassen und festgestellt, dass die articleID 0 ist. ` AND a.id=".$this-\>sSYSTEM-\>\_GET['sArticle']." ` Debug der der Query ergibt: AND a.id=0 Wie kann das zustande kommen? Ich rufe die Funktion definitiv mit der ArtikelId auf.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [17. Mai 2011 um 12:14 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/8 "2011-05-17T12:14:57Z")

</div>

Ich blick den Anfang der Funktion nicht so richtig: ` public function sGetArticleById ($id = 0){ eval($this-\>sSYSTEM-\>sCallHookPoint("sArticles.php\_sGetArticleById\_Start")); //error\_reporting(E\_ALL); if ($id) { $this-\>sSYSTEM-\>\_GET['sArticle'] = $id; } $this-\>sSYSTEM-\>\_GET["sArticle"] = intval($this-\>sSYSTEM-\>\_GET["sArticle"]); $isBlog = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne(" SELECT mode FROM s\_articles WHERE id = ? ",array($this-\>sSYSTEM-\>\_GET["sArticle"] )); eval($this-\>sSYSTEM-\>sCallHookPoint("sArticles.php\_sGetArticleById\_Start2")); ` Was läuft hier in meinem Fall schief? Warum setze ich oben $id = 0 ? Dann ist ja klar, dass in der Variable ID eine 0 steht… Bitte um Hilfe…

---

<div class="post-metadata">

**Author:** ![ronecker](https://avatars.discourse-cdn.com/v4/letter/r/d2c977/32.png) [@ronecker](https://forum.shopware.com/u/ronecker)\
**Post date:** [17. Mai 2011 um 14:07 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/9 "2011-05-17T14:07:54Z")

</div>

Srvus, der ( $id = 0 ) Aufruf heißt nur soviel wie, das die Variable 0 zugewiesen bekommt, wenn kein Wert übergeben wird. Klinkt dich doch mal bei dne Hookpoints ein und laß dir an jeder Stelle eine mail schicken, optional die variable an firephp senden und dort schauen was an den einzelnen stellen wirklich vor geht.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [17. Mai 2011 um 14:24 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/10 "2011-05-17T14:24:36Z")

</div>

[quote=“ronecker”]Srvus, der ( $id = 0 ) Aufruf heißt nur soviel wie, das die Variable 0 zugewiesen bekommt, wenn kein Wert übergeben wird. Klinkt dich doch mal bei dne Hookpoints ein und laß dir an jeder Stelle eine mail schicken, optional die variable an firephp senden und dort schauen was an den einzelnen stellen wirklich vor geht.[/quote] Hey, danke für die Info. Jetzt habe ich nicht ganz genau genau verstanden wo du meinst? Ich rufe ja die Funktion in meinem Plugin so auf: `$article = Shopware()-\>Modules()-\>Articles()-\>sGetArticleById($id);` Dann muss doch ein Wert übergeben werden? Welche Hookpoints meinst du? Den eval($this-\>sSYSTEM-\>sCallHookPoint(“sArticles.php\_sGetArticleById\_Start”)); und den eval($this-\>sSYSTEM-\>sCallHookPoint(“sArticles.php\_sGetArticleById\_Start2”)); ?

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [17. Mai 2011 um 16:10 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/11 "2011-05-17T16:10:17Z")

</div>

So, ich habe nun mal die Datei sArticles.php modifiziert und mit zwei verschiedenen Shops getestet. public function sGetArticleById ($id = 0){ eval($this-\>sSYSTEM-\>sCallHookPoint(„sArticles.php\_sGetArticleById\_Start“)); //error\_reporting(E\_ALL); var\_dump($id); if ($id) { $this-\>sSYSTEM-\>\_GET[‚sArticle‘] = $id; } Bei einem Shop habe ich hier die ID und bei dem Anderen steht eine 0 drin! EDIT: Da muss in dem Shop irgendwo ein Fehler sein. Ich habe die Ausgabe der ID nun in der Funktion sArticleById gelassen und wenn ich auf irgendeine Artikeldetail-Seite klicke, steht ganz unten auch int(0) Mache ich das bei anderen Shops, so erhalte ich hier immer die ID des aktuell angezeigten Artikels!

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [18. Mai 2011 um 09:15 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/12 "2011-05-18T09:15:59Z")

</div>

Gibt es hier noch Ideen um eine Lösung zu finden, bzw. das Problem zu finden? P.S. Das Forum ist heute morgen verdächtig ruhig^^

---

<div class="post-metadata">

**Author:** ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)\
**Post date:** [18. Mai 2011 um 09:27 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/13 "2011-05-18T09:27:37Z")

</div>

Lass dir bitte mal die komplette erzeugte SQL-Query aus dieser Funktion ausgeben und führe die manuell im Browser aus - also nach: ` if (!empty(Shopware()-\>Session()-\>Admin)){ $sql = str\_replace("AND a.active=1","",$sql); } ` die($sql); einfügen. Du übergibst ja fest eine ID an die Funktion - wo bekommst du diese her? Also stell mal ggf. den kompletten Code aus deinem Plugin hier ein.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [18. Mai 2011 um 09:52 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/14 "2011-05-18T09:52:07Z")

</div>

Hey Stefan, ich habe das gemacht und einmal die Artikeldetailseite aufgerufen, dann erhalte ich dieses Query mit ArticleID: ` SELECT a.id as articleID, aDetails.id as articleDetailsID, TRIM(ordernumber) as ordernumber, datum, additionaltext, shippingtime, shippingfree, instock, minpurchase, notification, purchasesteps, maxpurchase, purchaseunit, referenceunit, packunit, weight, laststock, unitID, template, pricegroupID, pricegroupActive, releasedate, a.mode, a.description AS description, keywords, description\_long, aSupplier.name AS supplierName, aSupplier.img AS supplierImg, aSupplier.id AS supplierID, a.name AS articleName, IFNULL(p.price,p2.price) as price, sales, IF(p.pseudoprice,p.pseudoprice,p2.pseudoprice) as pseudoprice, IFNULL(p.pricegroup,p2.pricegroup) as pricegroup, tax, attr1,attr2,attr3,attr4,attr5,attr6,attr7,attr8,attr9,attr10, attr11,attr12,attr13,attr14,attr15,attr16,attr17,attr18,attr19,attr20, filtergroupID, a.crossbundlelook FROM s\_articles AS a, s\_articles\_supplier AS aSupplier, s\_articles\_details AS aDetails LEFT JOIN s\_articles\_prices AS p ON p.articledetailsID=aDetails.id AND p.pricegroup='EK' AND p.from='1' LEFT JOIN s\_articles\_prices AS p2 ON p2.articledetailsID=aDetails.id AND p2.pricegroup='EK' AND p2.from='1', s\_core\_tax AS aTax, s\_articles\_attributes AS aAttributes WHERE a.taxID=aTax.id AND aAttributes.articledetailsID=aDetails.id AND a.id=76 AND aSupplier.id=a.supplierID AND aDetails.articleID=a.id AND aDetails.kind=1 AND a.active=1 AND ( SELECT articleID FROM s\_articles\_avoid\_customergroups WHERE articleID = a.id AND customergroupID = 1 ) IS NULL ` Dann habe ich das Plugin aufgerufen und hier erhalte ich die Query ohne die ArticleID `SELECT a.id as articleID, aDetails.id as articleDetailsID, TRIM(ordernumber) as ordernumber, datum, additionaltext, shippingtime, shippingfree, instock, minpurchase, notification, purchasesteps, maxpurchase, purchaseunit, referenceunit, packunit, weight, laststock, unitID, template, pricegroupID, pricegroupActive, releasedate, a.mode, a.description AS description, keywords, description\_long, aSupplier.name AS supplierName, aSupplier.img AS supplierImg, aSupplier.id AS supplierID, a.name AS articleName, IFNULL(p.price,p2.price) as price, sales, IF(p.pseudoprice,p.pseudoprice,p2.pseudoprice) as pseudoprice, IFNULL(p.pricegroup,p2.pricegroup) as pricegroup, tax, attr1,attr2,attr3,attr4,attr5,attr6,attr7,attr8,attr9,attr10, attr11,attr12,attr13,attr14,attr15,attr16,attr17,attr18,attr19,attr20, filtergroupID, a.crossbundlelook FROM s\_articles AS a, s\_articles\_supplier AS aSupplier, s\_articles\_details AS aDetails LEFT JOIN s\_articles\_prices AS p ON p.articledetailsID=aDetails.id AND p.pricegroup='EK' AND p.from='1' LEFT JOIN s\_articles\_prices AS p2 ON p2.articledetailsID=aDetails.id AND p2.pricegroup='EK' AND p2.from='1', s\_core\_tax AS aTax, s\_articles\_attributes AS aAttributes WHERE a.taxID=aTax.id AND aAttributes.articledetailsID=aDetails.id AND a.id=0 AND aSupplier.id=a.supplierID AND aDetails.articleID=a.id AND aDetails.kind=1 AND a.active=1 AND ( SELECT articleID FROM s\_articles\_avoid\_customergroups WHERE articleID = a.id AND customergroupID = 1 ) IS NULL ` Den Code des Plugin’s schicke ich dir gerade per PN raus.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [23. Mai 2011 um 20:20 UTC](https://forum.shopware.com/t/sgetarticlebyid/2816/15 "2011-05-23T20:20:56Z")

</div>

Das Problem is gelöst. Es lag an der lokalen shopware Installation. Die Datei myArticles.php im Ordner engine/core/class/inherit/ &nbsp; Dort wurde die Funktion sGetArticleById überschrieben und bei dem Aufrufen der Original-Methode wurde vergessen den $id Parameter zu übergeben. Danke Stefan für deine hervorragende Hilfe 😉
