[GELÖST] Weitere Datenbank-Tabelle in einem Dokument abfragen?

Hallo liebe Shopware-Gemeinde,

ich würde gerne die Public-Funktion assignValues() in der Datei Document.php (engine/Shopware/Components/Document.php) hooken, da ich gerne eine weitere Datenbanktabelle in einem Dokument auslesen möchte.

Ich habe es so versucht (sowohl schon mit before als auch after):

$this->subscribeEvent(
     'Shopware_Components_Document::assignValues::after',
     'afterAssignValues'
);

public function afterAssignValues(Enlight_Hook_HookArgs $args){
$controller = $args->getSubject();
$view = $controller->View();

$select = '
SELECT *
FROM database_table';

$table = Shopware()->Db()->fetchAll($select);
$view->assign('table', $table);
}

Leider klappt es nicht, da ich mit der foreach-Schleife keine Ausgabe erhalte:

{foreach from=$table item=table key=number} 
{$table.field}{/if} 
{/foreach}

Würde ich den Inhalt von afterAssignValues in die assignValues-Funktion der Datei Document.php (aber mit $this->_view->assign('table ', $table )) direkt werfen, klappt es - wäre ja aber nicht updatesicher.

Kann mir jemand einen Tipp geben, wo noch mein Fehler liegen könnte oder ob es vielleicht noch einen besseren Weg gibt?

Beste Grüße

Sebastian

Hallo, Schreib mal: $controller->_view->assign(„table“, $table); Dann solltest du über var_dump dir die table ausgeben lassen können.

[quote=“coolbax”]Hallo, Schreib mal: $controller->_view->assign(“table”, $table); Dann solltest du über var_dump dir die table ausgeben lassen können.[/quote] Hallo coolbax, danke für deine Antwort. Leider wirft es mir eine Fehlermeldung, dass er das Dokument nun nicht mehr erstellen kann und wirft mir beim Anklicken des Dokuments die “File not exists”-Fehlermeldung - sowohl bei Verwendung von before als auch after. Code: $this-\>subscribeEvent( 'Shopware\_Components\_Document::assignValues::after', 'afterAssignValues' ); public function afterAssignValues(Enlight\_Hook\_HookArgs $args){ $controller = $args-\>getSubject(); $view = $controller-\>View(); $select = ' SELECT \* FROM database\_table'; $table = Shopware()-\>Db()-\>fetchAll($select); $controller-\>\_view-\>assign("table", $table); } Wenn ich das Event oben auskommentiere, funktioniert die Dokumenterstellung wieder. Es scheint also an der Funktion zu liegen. Hast du eine Idee, woran es liegen könnte? Beste Grüße Sebastian

Das sollte so funktionieren. Hier mal eine Funktion die den Lagerbestand und die Herstellernummer übergibt. Funktioniert auf jeden Fall. public function afterAssignValues(Enlight\_Hook\_HookArgs $args) { $doc = $args-\>getSubject(); $order = $args-\>getSubject()-\>\_order-\>\_\_toArray(); foreach ($order['\_positions'] as $key =\> $value) { $sql = "SELECT suppliernumber, instock FROM s\_articles\_details WHERE ordernumber = ?"; $article = Shopware()-\>Db()-\>fetchRow($sql, array($value['articleordernumber'])); $modified[$key]["suppliernumber"] = $article['suppliernumber']; $modified[$key]["instock"] = $article['instock']; } $doc-\>\_view-\>assign("modified", $modified); }

1 „Gefällt mir“

[quote=“coolbax”]Das sollte so funktionieren. Hier mal eine Funktion die den Lagerbestand und die Herstellernummer übergibt. Funktioniert auf jeden Fall. public function afterAssignValues(Enlight\_Hook\_HookArgs $args) { $doc = $args-\>getSubject(); $order = $args-\>getSubject()-\>\_order-\>\_\_toArray(); foreach ($order['\_positions'] as $key =\> $value) { $sql = "SELECT suppliernumber, instock FROM s\_articles\_details WHERE ordernumber = ?"; $article = Shopware()-\>Db()-\>fetchRow($sql, array($value['articleordernumber'])); $modified[$key]["suppliernumber"] = $article['suppliernumber']; $modified[$key]["instock"] = $article['instock']; } $doc-\>\_view-\>assign("modified", $modified); }[/quote] Hallo coolbax, es klappt - ich hatte den Beispiel-Tabellennamen nicht ersetzt :oops: :oops: :oops: . Ich danke dir für deine Hilfe. Da war ich mit meiner Lösung ja fast fertig und nur der assign-Befehl war noch nicht korrekt. Könntest du mir vielleicht auch noch einen Tipp geben, wo ich das neue Dokument innerhalb des Plugins ablegen müsste, damit es Shopware erkennt (unter Views/documents klappt es nicht)? Oder fehlt da noch ein Event, das ich ansprechen muss? Hier das dazugehörige Thema: programmierung-f103/mit-plugin-eigenes-dokument-erzeugen-t33384.html . Beste Grüße Sebastian

Also der Pfad ist schon richtig. Aber vieleicht hat hängt es damit zusammen, das der Templateordner im Backend gewählt werden kann. Vieleicht musst du dort mal schauen.

[quote=„coolbax“]Also der Pfad ist schon richtig. Aber vieleicht hat hängt es damit zusammen, das der Templateordner im Backend gewählt werden kann. Vieleicht musst du dort mal schauen.[/quote] Hallo coolbax, ich habe auch mal das eigene Theme als Dokumenten-Theme eingestellt, trotzdem funktioniert es nicht und er erkennt das neue Dokument im Plugin-Ordner nicht (nur, wenn es im Bare-Ordner liegt). Muss ich evtl. noch irgendein Event ansteuern, damit Shopware gesagt wird, das es da ein neues Dokument gibt? Beste Grüße Sebastian

Da kann ich so auf die Schelle auch nichts sagen. Vieleicht kann Shopware sich da äußern.

[quote=„coolbax“]Da kann ich so auf die Schelle auch nichts sagen. Vieleicht kann Shopware sich da äußern.[/quote] Hallo coolbax, schade. Aber danke trotzdem für die Hilfe bei diesem Thema - dieses Problem ist ja nun gelöst, deswegen markiere ich das Thema mal als „Gelöst“. Für das andere Problem gibt es ja bereits ein eigenes Thema. Beste Grüße Sebastian