ich würde gerne einen Wert aus der Datenbank im Frontend anzeigen lassen, welcher jedoch nicht als Wert in $sArticles (oder woanders )vorliegt. Daher muss ich $sArticles um diesen Wert aus der Datenbank erweitern. Der Wert, welchen ich hinzufügen möchte liegt in der Tabelle "s_articles_supplier".
Daher muss ich nun also per SQL-Befehl (Select) die Werte aus der Datenbank abfragen, aber selbst wenn mir das gelingt, wie füge ich diese zu $sArticles dem entsprechenden Produkt hinzu?
Danke, kenne ich… hab da auch schon mal gesucht, aber nicht das passende gefunden und als Designer (nicht Programmierer) eher schwierig da komplett durchzusteigen. Gibt es eine Kurzfassung?
Bestimmt, aber durch eine Shopware-Schulung allein wird man auch nicht zum Programmierer, wenn man keiner ist. Immerhin ist mein Ziel ja nicht, von heute auf morgen den gesamten Shop umzuprogrammieren, sondern lediglich einen Wert auszulesen usw. Daher würde ich die Grundsatzdiskussion jetzt gerne hiermit beenden…
auch wenn du nicht den ganzen Shop umprogrammieren willst wirst du dafür ein kleines Plugin benötigen welches dir beim passenden Event den Wert als Templatevariable zur Verfügung stellt. Die Tutorials im Developers Guide sind schon recht kurz gehalten und man findet eigentlich für die meisten Fälle etwas, was man nur anpassen muss.
Wenn du dich damit nicht beschäftigen kannst oder willst, dann musst du das höchstwahrscheinlich in Auftrag geben.
Es ist leider nicht in einem 2 Zeiler erklärt und eine Komplettlösung darfst du hier nicht erwarten, sorry!
du kannst die Artikel relativ leicht erweitern, indem du eine weiteres Attribute hinzufügst. (In der DB ist es dann eine weitere Spalte in der s_articles_attributes). Wenn man diesen Weg geht, dann steht im Frontend das neue Attribute im $sArticle Array mit zur Verfügung. Die Werte könnten/müssten dann im Backend beim Artikel hinterlegt werden.
du kannst die Artikel relativ leicht erweitern, indem du eine weiteres Attribute hinzufügst. (In der DB ist es dann eine weitere Spalte in der s_articles_attributes). Wenn man diesen Weg geht, dann steht im Frontend das neue Attribute im $sArticle Array mit zur Verfügung. Die Werte könnten/müssten dann im Backend beim Artikel hinterlegt werden.
Ich hoffe, die Hinweise und beide Tutorials helfen dir.
Beste Grüße
Jens
Hallo,
anzumerken zu den beiden Tutorials wäre aber noch, das diese noch für Shopware 4 sind und manches dort beschriebene in Shopware 5 - Plugins nicht mehr verwendet werden soll/darf (beispielsweise: $view->extendsTemplate(…) ).
Die besten Tutorials sind immernoch die von Shopware selbst veröffentlichten, die sich speziell an Shopware 5 richten: Plugin quick Startup Guide.
eigentlich will ich gar nicht so viel, wie ihr hier bietet Aber schon mal danke für die Hilfe.
Ich versuche mal, es genauer zu erklären:
Ich möchte das Feld meta_description aus der Tabelle s_articles_supplier per SQL Befehl auslesen, irgendwie so:
private function getSupplierMeta() {
...
$sql= "SELECT meta_description FROM s_articles_supplier";
$fields = Shopware()->Db()->fetchRow($sql);
return $fields;
}
...
}
und dann der Variable $sArticles zuordnen und im Listing und der Detailseite zur Verfügung stellen und quasi wie {$sArticle.supplier_meta_description} im Template ausgeben können. Oder, falls es nicht möglich ist $sArticles zu erweitern, eine eigene Variable $dstArticles mit der Zuweisung ArtikelID und supplier_meta_description zu erstellen und als {$dstArticle.supplier_meta_description} zu verwenden.
Dass ich dazu ein kleines Plugin schreiben muss ist okay - damit kenne ich mich ein wenig aus. Dachte es wäre mit ein paar Zeilen Code möglich die Spalte auszulesen, der Variable zuzuweisen und im Template verfügbar zu machen.
Dort die sArticles aus dem View holen, die IDs auslesen, in einer DB-Abfrage für alle Artikel die gewünschten Daten auslesen und sArticles hinzufügen und dann wieder in den View schreiben.
Geht relativ simpel und macht nur eine zusätzliche DB-Abfrage statt für jeden Artikel im Listing eine zusätzliche.
Ich glaube nicht das du hier eine fertige Lösung von jemanden geliefert bekommst - falls du aber nicht weiterkommst, kannst du ja auch jemanden beauftragen, der dies für dich umsetzt.
ergänzend zu der Lösung von t2oh4e, hier das Prinzip, die sArtcle aus dem View zu holen und dann in den View schreiben.
Beste Grüße
Jens
public function onPostDispatchDetail(Enlight\_Event\_EventArgs $arguments) { /\*\*@var $controller Shopware\_Controllers\_Frontend\_Detail\*/ $controller = $arguments-\>getSubject(); $view = $controller-\>View(); $sArticle = $view-\>getAssign('sArticle'); // Do what you need ..... $view-\>assign('sArticle', $sArticle); }
Okay, das hilft mir alles schon mal ein um einiges Weiter zum Verständnis.
Ich hab nun ein Plugin, allerdings mit dem Event: Enlight_Controller_Action_PostDispatchSecure, weil ich die Werte im Listing, in der Detailansicht und wer weiß noch wo verwenden möchte. Geht doch, oder?
Dann habe ich eine Funktion, welche mir die Daten aus der Datenbank holt. Die Abfrage funktioniert, ich schreibe diese Testweise in eine Variable - $view->assign(testSupplierMeta’, $this->getSupplierMeta());:
private function getSupplierMeta()
{
$sql= "SELECT meta_description FROM s_articles_supplier";
$fields = Shopware()->Db()->fetchAll($sql);
return $fields;
}
Dann habe ich noch einen after Hook im Plugin install() registriert, also nach dem Event?!:
Jetzt muss ich noch die Daten aus der SQL-Abfrage dem entsprechenden Artikel jeweils zuweisen… Da hab ich noch keine Ahnung… Leider habe ich es hiermit auch noch nicht geschafft den Artikelnamen durch “Tutorial Artikel” zu ersetzen… damit wollte ich testen, ob das alles so hinhaut, was ich da mache…
also auf die Schnelle wäre mir mal aufgefallen dass du articelName anstatt articleName ändern willst (du hast das e und das l vertauscht, ich mach das auch gerne :-))