Templates ohne {block...} verändern

Guten Abend, also ich werde im Rahmen einer Umschulung demnächst mit einen Praktikum beginnen und habe nun von der Firma bereits zwei Übungsaufgaben Shopware betreffend zugeschickt bekommen, damit ich mich ein bisschen einarbeiten kann (kein muss). Derzeit stehe ich noch bei der ersten Übung. Es geht darum auf der Shopseite Preise und Bestellmöglichkeiten auszublenden, wenn ein Kunde nicht eingeloggt ist. Das ganze soll über ein PlugIn möglich sein. Demnach möchte ich nichts an den Shopware-Eigenen Templates direkt verändern. An dieser Übung und Einarbeiten sitze ich nun seit Freitag und komme nun einfach nicht mehr weiter. Einige oder fast alle Preise und Bestellmöglichkeiten, habe ich nun schon ausgeblendet, indem ich eigene Templates eingebunden habe. Diese Templates besitzen allerdings diese {block}-Elemente und hiermit war es dann auch nicht mehr sehr schwer, als ich den dreh etwas heraus bekommen habe. * Shopware 4.3.6 * Mein Problem sind nun die Templates, welche kein block besitzen, speziell welche über Ajax nachgeladen werden. Bei manchen, nicht allen Artikeln (Demodaten), ist auf der Detailseite diese Box “Kunden haben sich ebenfalls angesehen”. Diese ist ein sehr großes Problem. Diese Box wird aus der “frontend/listing/box_article.tpl” erstellt. Diese habe ich natürlich geändert, da diese auch an anderen Orten im Shop aufgetaucht ist. Innerhalb dieser tut sich nichts, welches am nachgeladenen Ajax/Javascript liegt. Das dafür verantwortliche Template ist “templates/_default/widgets/recommendation/slide_articles”. Und genau hier liegt meine Frage. Wie kann ich dieses Template überschreiben? … Ich denke mal, das bei anderen Templates, welche auch keine {block}-Elemente besitzen dies genauso von statten gehen würde. Nun zeige ich aber auch noch etwas Code von mir (Absoluter Shopware-Einsteiger): /\* Meine install()-Routine \*/ public function install() { $this-\>registerEvents(); $this-\>createConfiguration(); return array('success'=\>true,'invalidateCache'=\>array('frontend')); } /\* Registrierung der Events \*/ public function registerEvents() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatchPrices' ); } /\* onPostDispatch - Methode \*/ public function onPostDispatchPrices(Enlight\_Event\_EventArgs $arguments) { $controller = $arguments -\> getSubject(); $request = $controller -\> Request(); $response = $controller -\> Response(); $view = $controller -\> View(); $config = $this-\>Config(); $selIndex = $config-\>get('select'); if( !$request-\>isDispatched()||$response-\>isException()||!$view-\>hasTemplate() || $request-\>getModuleName() != "frontend" ) { return; } if( $this-\>checkCustomerLoginWithPluginConfiguration( $selIndex ) ){ $view-\>addTemplateDir($this-\>Path() . 'Views/'); /\* Preise und Bestellmöglichkeit eines Artikels in der Detailansicht entfernen bzw. ausblenden \*/ $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/detail/index.tpl'); $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/detail/data.tpl' ); $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/detail/buy.tpl'); /\* Bestellmöglichkeiten und Preise bei Artikeln-Auflistungen entfernen bzw. ausblenden \*/ $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/listing/box\_similar.tpl'); $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/listing/box\_article.tpl'); /\* Warenkorb Preise und Bestellmöglichkeiten entfernen bzw. ausblenden \*/ $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/checkout/cart\_item.tpl'); $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/checkout/cart\_footer.tpl'); $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/checkout/actions.tpl'); $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/checkout/ajax\_cart.tpl'); /\* Warenkorb in Navigation \*/ //$view-\>extendsTemplate('frontend/plugins/PLUGINNAMEcheckout/ajax\_amount.tpl'); /\* VERSUCH: Eigenes CSS und oder JavaScript nachzuladen \*/ $view-\>extendsTemplate('frontend/plugins/PLUGINNAME/index/header.tpl'); /\* Artikel-Slider ---- geht nichtt \*/ $view-\>extendsTemplate('widgets/recommendation/slide\_articles.tpl'); } } Der letzte etwas weiter auseinander gerückte Part ist nun der an welchen ich verzweifel. Ich hatte irgendwo glaube sogar hier im Forum gelesen, dass es mit einen Hook gehen soll? Aber wie wende ich den an? Bei Register-Events: $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch{{{HOOK::before / after}}} ', 'onPostDispatchPrices' ); Aber wie bekomme ich raus welchen Controller ich da aufrufen muss? Ich bin hier noch nicht wirklich richtig in die Materie reingekommen. Das Wiki ist zwar echo sehr schön und gut erklärt, allerdings für mich als Shopware-Anfänger fehlen da einige Zusammenhänge. Ich habe auch so nie produktiv programmiert, außer für mich selbst, was vielleicht auch eine große Rolle dabei spielt. Um CSS und Javascript einzubinden habe ich Code an das header.tpl angehängt. {extends file="parent:frontend/index/header.tpl"} {block name="frontend\_index\_header\_css\_screen" append} <link type="text/css" media="screen, projection" rel="stylesheet" href="%7Blink%20file='_resources/styles/emotion.css'%7D">{/block} {block name="frontend\_index\_header\_javascript\_jquery" append} <script type="text/javascript" src="%7Blink%20file='_resources/javascript/slide_article.js'%7D"></script>{/block} Ich kann aber nicht nachvollziehen, ob es so richtig ist, da sich im CSS rein garnichts hat anpassen lassen und mit Javascript konnte ich weder auf ein Element mit “getElementById(”")", noch eine alert-Meldung erwirken. Aufbau Ordner: …/index/header.tpl …/_resources/javascript/slide_article.js So das ist denke ich jetzt ersteinmal genug. Es wäre echt toll wenn mir jemand hierbei helfen kann, ansonsten werde ich im Laufe der Woche nocheinmal zu einem Programmierer in der Firma gehen :wink: Würde es aber gerne ersteinmal alleine schaffen, denn bis zum Praktikum habe ich noch eine Woche. MfG Marco

PS: Ich hoffe ich habe die richtige Kategorie ausgewählt. War mir nicht sicher ob in Templates oder in Programmierung :wink:

Bei Templates welche keinen Block enthalten erstellest du einfach die Datei in deinem Theme Ordner oder Plugin mit dem gleichen Inhalt, oder eben dem abgeänderten Inhalt.

Guten Morgen, [quote] Bei Templates welche keinen Block enthalten erstellest du einfach die Datei in deinem Theme Ordner oder Plugin mit dem gleichen Inhalt, oder eben dem abgeänderten Inhalt. [/quote] Das funktioniert leider nicht. Habe meine abgeänderte Datei nun in folgenden Pfad probiert: * engine/Shopware/Plugins/Local/Frontend/PLUGINNAME/Views/widgets/recommendation/slide_articles.tpl und * engine/Shopware/Plugins/Local/Frontend/PLUGINNAME/Views/widgets/emotion/slide_articles.tpl In beiden Ordnern nach Views befindet sich diese Datei. Aber überschreiben lässt sich die orginal-Datei trotzdem nicht. Habe das PlugIn auch mehrfach bereits neuinstalliert, da ich dachte das Shopware vielleicht diese Pfadangaben irgendwo speichert bei einer Installation aber dem ist nicht so. Allerdings, soll diese Änderung ja nur stattfinden, wenn kein Kunde eingeloggt ist. Daher hatte ich zwischenzeitlich wie erwähnt, eigenes JavaScript nachzuladen versucht, um nachträglich die Preise einfach “rauszuschmeissen” :wink: MfG

Hi, also ich habe jetzt eine Lösung - denke zwar nur eine vorläufige, aber das Ziel wurde erstmal erreicht zumindest. Habe folgenden Code in meine DispatchMethode eingetragen, nachdem alle anderen Templates verändert wurden: [code] /* Ausblenden der via. JavaScript nachgeladenen Preise */ echo ’

			var classPrice = document.getElementsByClassName("price");
			var classPriceUnit = document.getElementsByClassName("article_price_unit");
				
				
			for( var i = 0 ; i < classPrice.length ; i++ ){
				classPrice[i].style.display = "none";
				classPrice[i].innerHTML = "";
	        }				
			for( var i = 0 ; i < classPriceUnit.length ; i++ ){
				classPriceUnit[i].style.display = "none";
				classPriceUnit[i].innerHTML = "";					
			}
			
		</script>'; [/code] Wenn ich diesen JavaScript-Code in eine eigene .js-File stecke und wie in meinen Ersten Posting versuche, diese aufzurufen, passiert leider nichts. Sollte noch jemand eine sauberer Lösung finden wäre es nett, wenn ihr euch nocheinmal meldet. Dann werde ich nun dieses kleine PlugIn in Richtung "fertig" bringen und anschließend mit dem Programmierer der Firma nocheinmal Kontakt aufnehmen (ca. gegen Mittag). Bis dahin lasse ich den Thread noch auf ansonsten werde ich diesen nachher als GELÖST markieren. MfG MfG