Hallo,
Ich bin auf der Suche, wie man eine bereits existierende action (genauer gesagt die finishAction im Checkout Controller) erweiter kann, ohne dabei die komplette Checkout.php aus dem Controllers/Frontend Ordner in das eigene Plug-In kopieren zu müssen, da das ja nicht wirklich updatefreundlich ist, schätz ich mal.
Ich habe auf der Suche dann diesen Foreneintrag gefunden: https://forum.shopware.com/discussion/34252/controller-action-ueberschreiben-erweitern
Allerdings ist hier die Rede von Hooks und bisher habe ich zum Thema Hooks nur gelesen, dass man die Finger davon lassen soll, weil bad practice. Ich schätze also mal, dass es hier eine schönere Lösung gibt.
Um das ganze ein weniger konkret zu machen hier ein paar genauere Infos:
In meiner Bootstrap.php gibt es eine Funktion die generateCode heißt. Diese erstellt eine Zeichenfolge folgendermaßen:
public function generateCode()
{
//Creates 16 times a number and add it to the var
$rand = 0;
for ($i = 0; $i<15; $i++)
{
$rand .= mt_rand(0,9);
}
//On Checkoutcomplete add that random number to database table
$addInt = "INSERT INTO `s_plugin_tnev` (`vouchercode`) VALUES ($rand);";
$connect = Shopware()->Db()->query($addInt);
}
Diese Funktion soll nun ausgelöst werden, wenn der Kunde eine Bestellung erfolgreich abgeschlossen hat. Das würde ja heißen, wenn der Kunde die URL: webauftritt.de/frontend/checkout/finish erreicht hat wird diese Funktion ausgelöst.
Wenn ich nun diesen Code genau so in die Checkout.php reinkopier, funktioniert das auch einwandfrei. Nur möchte ich das etwas übersichtlicher.
Die finishAction()-Funktion ist in der Checkout.php sehr sehr lang. Ich suche also nach so etwas ungefähr:
class Shopware_Controllers_Frontend_CheckoutGenerate extends Shopware_Controllers_Frontend_Checkout
{
function finishAction()
{
generateCode();
parent::finishAction();
};
};
Nur leider funktioniert das nicht.
Gibt es hierfür irgendeine schöne Lösung die mit Shopware kompatibel ist?
Mein Plugin-Verzeichnis teilt sich folgendermaßen auf:
- Frontend
- meinPlugin
- Bootstrap.php
- Controllers
- Frontend
- Checkout.php
- Frontend
- meinPlugin
Beste Grüße,
Max Konrad