Fehlermeldung: „Call to undefined function shopware()“ Wie kann man in diesem Fall am besten auf die DB zugreifen? Der Zugriff erfolgt in einer externen PHP-Datei
Eine komplett von Shopware abgeschnitten PHP Datei? Was brauchst du denn an Daten? Ansonsten benutz doch die API?
Ich möchte eine Liste mit allen Artikeln, welche eine der beiden folgenden Bedingungen erfüllt: - Die Bestellnummer beginnt mit der vergebenen Zeichenfolge, - Oder die Zeichenfolge ist im Artikelnamen enthalten
Hey, dann setze das entweder als Shopware Frontend-Controller um, oder aber du baust ein separates Script, welches einfach die config.php inkludiert - dann baust du eine MySQL-Datenbankverbindug auf und führst die notwendigen Queries aus - ich würde das aber als Frontend-Controller umsetzen.
Das Einbinden der config.php und den manuellen Aufbau der DB-Verbindung habe ich schon durchgeführt, aber ich suche eine einfachere Möglichkeit. Es geht hier um die Erweiterung der Standard Backend-Module. Da möchte ich nicht unbedingt einen neuen Controller anlegen oder einen bestehenden verändern.
Hey, dann beschreibe nochmal genau, was du eigentlich erreichen willst und poste deinen bestehenden Code - so ist das echt Rätselraten, da einfach nicht klar ist, was du genau möchtest…
<?php header('Content-type: text/html; charset="iso-8859-1"',true);
$q = trim($_GET["q"]);
$q = utf8_decode($q);
if (!(is_string($q) && (strlen($q)>0))) { return; } require\_once('../../../../connectors/api/api.php'); $api = new sAPI(); $sql = "SELECT ad.ordernumber AS nr, a.name AS name FROM s\_articles a, s\_articles\_details ad WHERE a.id = ad.articleID"; $inputOrdernumber = $q.'%'; $inputName = '%'.$q.'%'; $sql = $sql." AND (ad.ordernumber LIKE '".$inputOrdernumber."' OR a.name LIKE '".$inputName."') ORDER BY ad.ordernumber"; $resData = Shopware()-\>Db()-\>fetchAll($sql); foreach ($resData as $value) { echo $value['nr']."
".json\_encode($value['name'])."\n"; } ?\>
Und von wo aus soll das nun aufgerufen werden? Ist das ein komplett separates Script, wird das in einem Backend-Modul verwendet? Wenn es nur darum geht, das Code-Beispiel funktionsfähig zu machen… $resData = Shopware()-\>Db()-\>fetchAll($sql);
ersetzen durch: $resData = $api-\>sDB-\>getAll($sql);
Die PHP-Datei wird von einem Autocompleter im Backend-Module „articles“ aufgerufen. Die API möchte ich aber ungerne verwenden. Nach dem Hinweis von farbplatoon habe ich es mal mit der Anbindung der API probiert. Da die Api-Klasse von der Shopware-Klasse erbt, stehen die benötigten Objekte zur Verfügung.
Hmm? Dann ist dein Vorgehen aber komplett falsch - da findet ja z.B. auch keine Überprüfung statt, ob ein Benutzer überhaupt die Berechtigung hat, das Script aufzurufen. Die einzig richtige Lösung ist hier: - Neue Controller-Action getDataAction anlegen - Dort die Daten via Shopware()->Db() usw. abfragen - mit $this->View()->setTemplate(); das Rendern deaktivieren - Die Daten mit json_encode ausgeben Ein komplett lauffähiges Beispiel beeinhaltet das Recommendation Plugin - dort werden im Template via ExtJS die KOmponenten definiert, die dann dynamisch Daten aus dem Backend-Controller RecommendationAdmin nachladen!
Danke für den Hinweis, habe jetzt einen Controller eingesetzt.