Ich habe ein Test Plugin geschrieben, welches einen Button auf die Warenkorb Seite einfügen soll.
Der Controller liegt im Frontext > [Plugin] > Controllers > Frontend > MeinTest.php
Bootstrap.php
createMyEvents();
return true;
}
/**
* Creates and subscribe the events and hooks.
*/
private function createMyEvents()
{
$this->subscribeEvent(
'Enlight_Controller_Action_PostDispatchSecure_Frontend', 'onFrontendPostDispatch'
);
$this->subscribeEvent(
'Enlight_Controller_Dispatcher_ControllerPath_Frontend_MeinTest', 'onGetControllerPathFrontend'
);
}
public function onFrontendPostDispatch(Enlight_Event_EventArgs $args)
{
/** @var \Enlight_Controller_Action $controller */
$controller = $args->get('subject');
$view = $controller->View();
$view->addTemplateDir(
__DIR__. '/Views'
);
}
/**
* Returns the path to a frontend controller for an event.
*
* @return string
*/
public function onGetControllerPathFrontend()
{
return __DIR__. '/Controllers/Frontend/MeinTest.php';
}
}
MeinTest.php
Code für den Button:
ButtonText
Was habe ich vergessen bzw falsch gemacht?
Hallo @inkarnation,
Was genau ist denn der Fehler?
Wird der “Button” nicht angezeigt?
Lässt sich der Controller nicht aufrufen?
Funktioniert die Weiterleitung nicht korrekt?
Gruß,
Patrick
Hallo Patrick,
Entschuldige, in der Tat habe ich diese Info unterschlagen.
Der Button wird korrekt gerendert und angezeigt:
ButtonText
Das Problem ist, das er bei einem Klick auf /MeinTest weiterleitet (Das ist nach meinem Verständnis korrekt, nachdem /index äquivalent zu /MeinTest/ & /MeinTest/index ist). Leider antwortet der Server dabei mit einem HTTP 404 Error Code.
Ein scheint als ob der „Controller“ bzw. die action nicht gefunden wird? Erwarten würde ich, eine weiße Seite mit dem Inhalt von die();.
Hallo @inkarnation,
schau’ doch einmal, ob die Methode onGetControllerPathFrontend in deiner Bootstrap auch wirklich geladen wird, wenn du den Link manuell aufrufst, also bspw.:
http://deinShop.de/DeinShop/MeinTest
Am Besten baust du da mal direkt das „die()“ rein.
Dann lässt sich das Problem etwas eingrenzen.
Gruß,
Patrick
Hallo Patrick,
habe die Methode mit dem die(); versehen und einmal die URL Manuell + einmal über den Button aufgerufen (Cache etc. natürlich alles geleert).
Tatsächlich passiert nichts, wie es scheint wird die Methode nicht aufgerufen. Habe ich das Event richtig registriert?
Das Event dürfte passen.
Hast du das Plugin mal neu installiert?
Kann sein, dass du das Plugin erst installiert und im Anschluss das Event zum Code hinzugefügt hast - somit wäre dein Controller-Event noch nicht im System.
Gruß,
Patrick