# shopware() ist undefiniert

**URL:** <https://forum.shopware.com/t/shopware-ist-undefiniert/1284>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [7. Januar 2011 um 13:34 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284 "2011-01-07T13:34:15Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sebastian\_K](https://avatars.discourse-cdn.com/v4/letter/s/e79b87/32.png) [@Sebastian\_K](https://forum.shopware.com/u/Sebastian_K)\
**Post date:** [7. Januar 2011 um 13:34 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/1 "2011-01-07T13:34:15Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![farbplatoon](https://avatars.discourse-cdn.com/v4/letter/f/977dab/32.png) [@farbplatoon](https://forum.shopware.com/u/farbplatoon)\
**Post date:** [8. Januar 2011 um 13:59 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/2 "2011-01-08T13:59:41Z")

</div>

Eine komplett von Shopware abgeschnitten PHP Datei? Was brauchst du denn an Daten? Ansonsten benutz doch die API?

---

<div class="post-metadata">

**Author:** ![Sebastian\_K](https://avatars.discourse-cdn.com/v4/letter/s/e79b87/32.png) [@Sebastian\_K](https://forum.shopware.com/u/Sebastian_K)\
**Post date:** [10. Januar 2011 um 08:22 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/3 "2011-01-10T08:22:01Z")

</div>

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

---

<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:** [10. Januar 2011 um 08:27 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/4 "2011-01-10T08:27:29Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Sebastian\_K](https://avatars.discourse-cdn.com/v4/letter/s/e79b87/32.png) [@Sebastian\_K](https://forum.shopware.com/u/Sebastian_K)\
**Post date:** [10. Januar 2011 um 08:37 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/5 "2011-01-10T08:37:02Z")

</div>

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.

---

<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:** [10. Januar 2011 um 08:46 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/6 "2011-01-10T08:46:11Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![Sebastian\_K](https://avatars.discourse-cdn.com/v4/letter/s/e79b87/32.png) [@Sebastian\_K](https://forum.shopware.com/u/Sebastian_K)\
**Post date:** [10. Januar 2011 um 08:56 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/7 "2011-01-10T08:56:10Z")

</div>

`<?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"; } ?\>`

---

<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:** [10. Januar 2011 um 09:00 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/8 "2011-01-10T09:00:56Z")

</div>

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); `

---

<div class="post-metadata">

**Author:** ![Sebastian\_K](https://avatars.discourse-cdn.com/v4/letter/s/e79b87/32.png) [@Sebastian\_K](https://forum.shopware.com/u/Sebastian_K)\
**Post date:** [10. Januar 2011 um 09:08 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/9 "2011-01-10T09:08:59Z")

</div>

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.

---

<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:** [10. Januar 2011 um 09:11 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/10 "2011-01-10T09:11:58Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![Sebastian\_K](https://avatars.discourse-cdn.com/v4/letter/s/e79b87/32.png) [@Sebastian\_K](https://forum.shopware.com/u/Sebastian_K)\
**Post date:** [10. Januar 2011 um 10:41 UTC](https://forum.shopware.com/t/shopware-ist-undefiniert/1284/11 "2011-01-10T10:41:24Z")

</div>

Danke für den Hinweis, habe jetzt einen Controller eingesetzt.
