Controller Aufruf

Morgen, wenn ich einen Controller über die Template Datei aufrufe, mache ich das ja so: {url module=frontend controller=Name action=index} Hieraus wird dann folgende URL erzeugt: http://www.shopware.vm/shopware.php/sViewport,Name Den gleichen Aufruf bekomme ich ja auch direkt mir http://www.shopware.vm/Name Möchte ich jetzt nicht zur action=index, sonder test, dann sieht der sVoewport ja so aus: http://www.shopware.vm/shopware.php/sVi … ction,test 1.) Wie ist hier die Kurzform? 2.) Wie verwende ich {url module=frontend controller=Name action=index} direkt in der Controller.php? ich möchte einen Email mit einem Link verschicken, der Link ist der Controller Link. Danke

Hey, 1.) Was meinst du mit Kurzform? 2.) Shopware()-\>Router()-\>assemble(array('module'=\>'frontend','controller'=\>'detail','action'=\>'index','sArticle'=\>$articleID));

  1. Danke :wink: 1.) Wir wird die action zur URL angefügt? Langform: http://www.shopware.vm/shopware.php/sVi … rollerName Kurzform: http://www.shopware.vm/ControllerName Mit action Langform: http://www.shopware.vm/shopware.php/sVi … ction,Test Kurzform: ? P.S. Eig. hat es sich mit der 2. AW von dir erledigt. Aber nur aus Interesse.

Also diese Viewport-URLs kommen nur, weil du das Plugin RewriteOld aktiviert hast. Die (neuen) kurzen URls sehen dann wie folgt aus. http://www.deinshop.de/controller/action/var1/inh1/var2/inh2 Also z.B. /detail/index/articleID/23

1 Like

Morgen Stefan, und wie kann ich einen Controller über den PHP Code aufrufen? Shopware()-\>Controllers()-\>Frontend()-\>Checkout()-\>finishAction(); Funktioniert nicht. Danke

Was willst du da genau machen? Du kannst ja nicht einfach eine Action antriggern - dort wird ja z.B. auf den View zugegriffen der so garnicht instanziert ist… Also erkläre bitte, was du genau vorhast.

Okay, ich habe ein Plugin welchers bei der View checkout/finish den Block {block name=‚frontend_checkout_finish_teaser‘} ersetzt und hier ein IFRAME einbindet zur direkten Bezahlung. Nun muss ich in dem PHP Code der Bank drei URL angeben. Succuss, Cancel und Error und je nach dem wie die Transaktion läuft wird auf die Seite weitergeleitet. Meine Idee nun, ich habe einen eigenn Controller mit den Actions Succuss, Cancel und Error. Bei alles drei sollte die normale checkout/finish geladen werden (wenn ich es manuell oben in die Adressleiste eingebe, funktioniet es) aber, über den Teaser Block sollte dann die Meldung kommen, Zahlung erfolgreich, Zahlung gescheitert oder Benutzerabbruch. Ich hoffe du verstehst was ich machen will. Oder wie löse ich dies?

Puhh, das ist garnicht so einfach - man kann die Finish Action eigentlich nicht direkt aufrufen, sonst könnte ja jeder eine Bestellung ohne Bezahlung direkt abschicken… Wir müssen hier noch ein Tutorial liefern, welches das Thema Bezahlung und Shopware vernünftig erklärt… In der Zwischenzeit setze ich da gleich mal einen Kollegen dran, der dir eine einfache Lösung hier einstellt.

Moment… ich habe noch eine Idee. Ich zeige nun einfach die checkout,finish an, und darüber lege ich dann in die shadowbox bzw. div class=“modal” den Bezahlvorgang. Solle ja gehen. EDIT: Aber der andere Weg wäre natürlich auch gut, rein Informativ! :slight_smile:

Hi, eine Cancel-/Error-Seite gibt es in Shopware noch nicht. Die müsstest du also selber anlegen. Das kannst du aber wahrscheinlich leicht durch eine Erweiterung der Abschlussseite machen. Bei der Umleitung auf die Finish-Seite, solltest du die “sUniqueID” nicht vergessen. Damit kann die Zuordnung zur Bestellung sichergestellt werden. Ohne diese “sUniqueID” wird die Bestellnummer nicht auf der Abschlussseite ausgegeben. edit: Beipspiel: In der iFrame-Datei: UniqueId erzeugen $uniqueId = substr(md5(uniqid(mt\_rand(), true)), 0, 10); Urls erzeugen $finishUrl = Shopware()-\>Router()-\>assemble(array( 'module' =\> 'frontend', 'controller' =\> 'checkout', 'action' =\> 'finish', 'sRefererAllowed' =\> '1', 'sUniqueID' =\> $uniqueId )); $notifyUrl = Shopware()-\>Router()-\>assemble(array( 'module' =\> 'frontend', 'controller' =\> 'myPayment', 'action' =\> 'notify', 'sRefererAllowed' =\> '1', 'uniqueID' =\> $uniqueId, 'coreID' =\> Shopware()-\>SessionID() )); In der Notify-Datei: $payment = new sPayment(); //Authentizität überprüfen ... //Bestellwert überprüfen ... //Status festlegen $status = 12; //Bestellung abschließen $payment-\>submitOrder('', '', $status); Viele Grüße Heiner