301 Redirect für vorhandenen Controller

Hallo. Ich versuche den Zugriff auf die Tell A Friend Funktion zu deaktivieren. Da ich im Backend keine Option dafür gefunden habe war meine Idee das über ein Plugin zu realisieren. Da ich noch Blutiger Anfänger bin brauche ich nun etwas Hilfe. Mein Plan ist, über das Event Enlight_Controller_Front_PreDispatch den Aufruf des tellafriend Controllers abzufangen und einen 301 Redirect auf die Produktseite der im tellafriend-Link enthaltenen Product-ID auszulösen. Was mir nicht klar ist, wie kann ich aus dem Plugin-Code heraus den 301 Redirect auslösen und die weitere Ausführung des Aufrufs unterbrechen?

Um die Tell-A-Friend Funktion zu deaktivieren, könntest Du einfach den Link aus dem Template entfernen. Schau Dir ggf. im “Labs”-Bereich den “Designer’s Guide” an, falls noch nicht geschehen. Das Basis-Template liegt unter templates/_default/frontend/detail/actions.tpl. Eine direkte lokale Anpassung geht so: Erstelle unter _emotion_local die Ordnerstruktur /frontend/detail/. Leg darin eine Datei namens actions.tpl an. Die Datei bekommt folgenden Inhalt:{extends file='parent:frontend/detail/actions.tpl'} {block name='frontend\_detail\_actions\_voucher'} {/block} Damit überschreibst Du den Block [color=blue]frontend_detail_actions_voucher[/color] mit einem leeren Block => der Link ist weg. Zum Übernehmen der Änderungen muss der Template-Cache im Backend geleert werden. Wenn das ganze für einen Kunden-Shop ist, kannst du natürlich auch über ein Plugin Änderungen am Template vornehmen. Siehe dazu die Beispiel-Plugins der Developer-Schulung (z.B. gleich das erste). Gruß, Nico.

Danke für den Tip. Genau das habe ich bereits getan. Das löst aber nicht das Problem dass die Formulare trotzdem funktionieren und von Spambots verwendet werden können.

Habe es hinbekommen. Falls sich jemand fragt wie das geht: public function install() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Tellafriend', 'redirectTellafriend', 300 ); return true; } function redirectTellafriend(Enlight\_Event\_EventArgs $args) { /\* @var $action Enlight\_Controller\_Action \*/ $action = $args-\>getSubject(); /\* @var $request Enlight\_Controller\_Request\_RequestHttp \*/ $request = $action-\>Request(); $articleId = $request-\>getParam('sArticle'); $sArticle = Shopware()-\>Modules()-\>Articles()-\>sGetArticleById($articleId); $action-\>redirect($sArticle['linkDetailsRewrited'], array('code' =\> 301)); return true; }

Jepp, wenn Du wegen Spambots o.ä. wirklich den Controller überladen musst, ist dieses Event genau der richtige Ansatz.