Hallo Leute, Ursprung für meinen Versuch, ein Plugin zur Ausgabe der Hersteller in eine Templatedatei war der Gedanke, eine eigene Seite im Shop zu haben, auf der alle Hersteller als Liste oder Tabelle mit Logo und Beschreibung ausgegeben werden. Im Forum fand ich diesen Hinweis eines Shopware Mitarbeiters: Herstellerliste anzeigen Man solle ein eigenes Plugin schreiben, einen Controller erstellen, darin die Tabelle s_articles_supplier auslesen und dann an eine Templatedatei ausgeben. Ich habe eine Kategorie “Hersteller”, die auf eine Shopseite “Hersteller” verweist. Diese Shopseite wiederum hat als TplVariabale = sContent und als TplPfad meine index.tpl, in die mein Plugin die Herstellerdaten ausgeben soll. Ich habe dann versucht, solch ein Plugin zu schreiben, es will aber nicht funktionieren. Hier meine Bootstrap.php: [code]<?php /**
*Bootstrap Class of the Plugin “Manufacterer Listing”
*/
class Shopware_Plugins_Frontend_VDManufactererListing_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
public function getCapabilities()
{
return array(
‘install’ => true, ‘update’ => true, ‘enable’ => true ); } public function getLabel() { return ‘Hersteller Listing’; } public function getVersion() { return ‘0.0.1’; } public function getInfo() { return array( ‘version’ => $this->getVersion(), ‘label’ => $this->getLabel(), ‘supplier’ => ‘FW’, ‘description’ => ‘Eine Liste der gespeicherten Hersteller im Template ausgeben’, ‘support’ => ‘FW,a@b.de’, ‘link’ => ‘http://www.myshopware.de/’ ); } public function install() { $this->subscribeEvent($event); return true; } protected function subscribeEvents() { $event = $this->createEvent( ‘Enlight_Controller_Dispatcher_ControllerPath_Frontend_SupplierListing’, ‘onGetControllerPath_Frontend_SupplierListing’ ); } public function onGetControllerPath_Frontend_SupplierListing() { $supplierID = $this->Request()->getParam(‘supplierID’); $select =’ SELECT s_articles_supplier.img, s_articles_supplier.description FROM s_articles_supplier ‘; $items = Shopware()->Db()->fetchRow($select, $supplierID); $this->View()->assign(array( ‘success’ => true, ‘data’ => $items, ‘count’ => count($items) )); $view->extendsTemplate(dirname(__FILE__).’/index.tpl’); $view->extendsBlock(“frontend_index_supplierlisting”,’
{$items}
'); } }[/code] HIn meiner index.tpl sieht’s so aus: [code]{block name=“frontend_index_supplierlisting”}
Herstellerliste
{$items}
{/block}[/code] 1. Ich verstehe noch nicht ganz, wie ich das Plugin auslöse, wenn ein Besucher auf die Kategorieseite “Hersteller” geht. 2. Stimmt meine Zuweisung "$view->extendsBlock(“frontend_index_supplierlisting”,’
{$items}
');" so? 3. Kann mein Plugin so überhaupt funktionieren? Mein Eindruck ist, das meine bootstrap.php nicht aufgerufen wird. Bin ein Einsteiger und über Hilfe sehr dankbar! Grüße, Flo
Hallo, das Plugin schaut noch ein wenig buggy aus. $this-\>View() In den Online-Tutorials solltest Du Infos zum Debuggen via Firefox-Konsole finden. Da kannst Du Dich dann langsam an die Lösung heranarbeiten und auch prüfen, ob Dein Plugin auf der gewünschten Seite überhaupt aufgerufen wird. Von der Entwickler-Schulung gibt es zudem hier irgendwo die Beispiele zum Download - ggf. helfen Dir diese auch weiter. Viel Erfolg mit :shopware: Shopware, Rafael
Erst mal vielen dank für Eure Antworten! Laut Debugger wird mein PlugIn anscheinend gar nicht aufgerufen. Da werden zwar mehrere Fehlermeldungen angezeigt, aber nur von anderen PlugIns. Installation und Aktivierung funktionierte aber problemlos. Habe meinen Code in der Bootstrap.php angepasst ($view Variable gesetzt): [code] public function onGetControllerPath_Frontend_SupplierListing() { $supplierID = $this->Request()->getParam(‘supplierID’); $select =’ SELECT s_articles_supplier.img, s_articles_supplier.description FROM s_articles_supplier ‘; $items = Shopware()->Db()->fetchRow($select, $supplierID); $view->assign(array( ‘success’ => true, ‘data’ => $items, ‘count’ => count($items) )); $view->extendsTemplate(‘frontend/plugins/VDManufactererListing/index.tpl’); $view->extendsBlock(“frontend_index_supplierlisting”,’
{$items} Käsebrot
'); } [/code] Leider wird das PlugIn nicht aufgerufen. Hat einer von euch Links zu den Beispielen der Entwicklerschulung? Ich denke, ich muss mich da noch mehr reinarbeiten. Hatte mich an die kurze Anleitung eines Shopware Mitarbeiters gehalten: PlugIn für Hersteller Anzeige
Verwende $this->View()-> Und dein Event konnte nicht installiert werden weil die Funktion nicht gibt. Schau dir die Zeilen die ich dir genannt habe bitte noch einmal an. Gruß
Ok, schon mal danke für eure Hilfe. Hab den Code jetzt folgend geändert: [code]public function install() { $event = $this->createEvent( ‚Enlight_Controller_Dispatcher_ControllerPath_Frontend_SupplierListing‘, ‚onGetControllerPath_Frontend_SupplierListing‘ ); $this->subscribeEvent($event); return true; } public function onGetControllerPath_Frontend_SupplierListing() { $supplierID = $this->Request()->getParam(‚supplierID‘); $select =’ SELECT s_articles_supplier.img, s_articles_supplier.description FROM s_articles_supplier ‚; $items = Shopware()->Db()->fetchRow($select, $supplierID); $this->View()->assign(array( ‚success‘ => true, ‚data‘ => $items, ‚count‘ => count($items) )); $this->View()->extendsTemplate(‚frontend/plugins/VDManufactererListing/index.tpl‘); $this->View()->extendsBlock(„frontend_index_supplierlisting“,‘
{$items}
'); }[/code] Zur Logik / Verständnis: 1. Ich erstelle und registriere das Controller Event „onGetControllerPath_Frontend_SupplierListing“. 2. Dann wird das Event mit Daten gefüttert innerhalb public function onGetControllerPath\_Frontend\_SupplierListing() 3. Die Daten werden an das Template index.tpl innerhalb des Blocks „frontend_index_supplierListing“ ausgegeben. Ist meine Logik soweit überhaupt korrekt? Mein PlugIn wird im Backend ohne Fehler installiert. Aber soweit ich das sehe wird bei Klick auf meinen Link „Marken“ im Frontend zwar die Template Datei index.tpl aufgerufen, aber das Plugin greift nicht. Weder wird der Block in der index.tpl mit daten gefüllt noch erscheint eine Fehlermeldung o.ä. Im Debugger wird gar kein Zugriff auf das Plugin protokolliert. Wo könnte da noch der Fehler liegen?
Danke euch allen. Mittlerweile habe ich das Programmieren des PlugIns aufgegeben und mir folgendes im Community Store gekauft: „Marken auf einer Seite“ von Satzmedia GmbH Das erfüllt meine Vorgabe fast. Genügt erst mal.