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
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.
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.
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.
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?
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.
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.
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…
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=“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”)); ?
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!
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^^
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.
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.
Das Problem is gelöst. Es lag an der lokalen shopware Installation. Die Datei myArticles.php im Ordner engine/core/class/inherit/ 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