magento Ansatz speichern die referer-url und die keywords
Mein Ziel ist das speichern der Datenbank die url, referer und Suchbegriffe bei der Eingabe auf jeder Seite unseres Shops. Ich überprüft diese Frage und Ihre Antwort, um zu versuchen, um etwas Licht in mein problem.
Den Ansatz, den ich verfolge ist:
-
Haben einen block, der stick wird auf dem Standard-layout so an, dass es geladen wird, auf jeder Seite (getestet, funktioniert). Dieser block wird Lesen Sie die Referenz mit dem folgenden code:
$request['url'] = $this->getRequest()->getServer('HTTP_REFERER');
-
Dann rufen Sie die Funktion übergeben die $Anfrage an einen controller:
Diesen Schritt habe ich immer noch nicht weiß, wie es zu tun, mit redirect? Oder vielleicht durch den Aufruf einer dispatchEvent und auf dem controller mit einempostAction
Funktion?//on the phtml file <div> <?php $request['url'] = getRequest()->getServer(‘HTTP_REFERER’); Mage::dispatchEvent("allpagescontroller", $request); ?> </div>
-
Den controller instanziieren mein Modell aus und rufen Sie den Set-Methoden für update/insert neeeded Werte
//on the controller function postAction ($params) { $referer = $this->getRequest()->getPost(); }
-
Auf dem Modell habe ich alle auch den passenden code für die CRUD-Operationen
Ist das richtig? Ich versuche zu Folgen, die Magento MVC-Ansatz, indem Sie die folgenden Schritte. Jetzt habe ich den code auf die phtml-Datei. Ich bin immer der referer, der Aufteilung und der Instanziierung des Modells auf alles speichern. Aber ich weiß, das ist nicht korrekt.
Auf config.xml für heute habe ich:
<?xml version="1.0"?> <config> <modules> <Dts_Allpages> <version>0.1.0</version> </Dts_Allpages> </modules> <global> <models> <allpages> <class>Dts_Allpages_Model</class> <resourceModel>allpages_mysql4</resourceModel> </allpages> <allpages_mysql4> <class>Dts_Allpages_Model_mysql4</class> <entities> <keywords> <table>keywords</table> </keywords> <referencedpages> <table>referencedpages</table> </referencedpages> </entities> </allpages_mysql4> </models> <blocks> <allpages> <class>Dts_Allpages_Block</class> </allpages> </blocks> <helpers> <allpages> <class>Dts_Allpages_Helper</class> </allpages> </helpers> <resources> <allpages_write> <connection> <use>core_write</use> </connection> </allpages_write> <allpages_read> <connection> <use>core_read</use> </connection> </allpages_read> </resources> </global>> <frontend> <routers> <allpages> <use>standard</use> <args> <module>Dts_Allpages</module> <frontName>allpages</frontName> </args> </allpages> </routers> <layout> <updates> <allpages> <file>allpages.xml</file> </allpages> </updates> </layout> </frontend> </config>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Logik ist nicht korrekt in Bezug auf Magento MVC-flow. Vorlage ist der Letzte stop des Programmablaufs, sollten Sie sich nicht einfügen ALLE Logik in templates, da Ihr system zu verwandeln, instabil Durcheinander.
Die Logik, die Sie versuchen zu erreichen, benötigt keine Sicht. Es erfordert nicht sogar Controller. Wie Sie wissen, die Magento nutzt eine Event-Observer-Muster, und Ihre Aufgabe ist nur zu Fragen, für Sie.
Erstellen Sie Ihre Beobachter und hören Sie einige event-von der ersten Anfrage fließen. Hören Sie zu jedem Ereignis, das ausgelöst wird, die auf jeder Seite verlangen, aber es sollte nicht zu früh - wenn das system selbst ist noch nicht initialisiert, und es sollte nicht zu spät sein, wenn einige der anderen system-Logik kann redirect, vorwärts oder machen einige änderungen an referrer. Ich denke
controller_action_predispatch
an Ihre Bedürfnisse anpassen.Im Betrachter können Sie die
HTTP_REFERER
und speichern Sie es in die DB mit Ihrem Modell-Ebene.<events><controller_action_predispatch><observers><allpages><class>allpages/observer</class><method>saveReferrer</method></allpages></observers></controller_action_predispatch></events>
Sie sollten ein Observer-Modell mit saveReferrer Methode, und es sollte ausgelöst werden, die auf jeder Seite Anfrage<allpages>
durch<controller_action_before>
. Ist das ok? Wenn ich nicht empfangen konnte eine Datei nicht enthalten ist, wenn Sie auf der Suche für die Observer.php auf Dts\AllPages\Model\Observer.phpWarning: include(Dts\Allpages\Model\Observer.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\magento\lib\Varien\Autoload.php on line 93
und einige weitere code<allpages>
hier ist nur ein alias, den Ihr Beobachter-Prozess. Ja, und wenn ich sagte, Sie sollten erstellen Sie Ihre Beobachter-Modell, ich meinte genau das - zu erstellen Dts\AllPages\Model\Observer.php die Datei mit der Klasse Dts_AllPages_Model_Observer. und in dieser Klasse - MethodesaveReferrer
Mage::Log('Now in');
auf die saveReferrer Methode, und ich nicht bekommen, nichts. Ist wie wenn der Beobachter nicht erkannt. Ich bin mit CommerceBug von @AlanStorm und auf die Klasse/URI-Lookup " - Registerkarte, geben Sie mir allpages/Beobachter, und es ist Rückkehr die richtigen Pfad-und Klassennamen...ich bin immer ansious... brauche mehr KaffeeMage_Core_Controller_Varien_Action::preDispatch
Methode. Aber wenn Sie die Entwicklung für EE mit PageCache eingeschaltet, ist es möglich, bekommen Sie Ihre Seite aus dem cache weglassen des normalen request-flow... so müssen Sie, um das Ereignis zu finden, das Ihren Bedürfnissen.. Was Sie tun können, ist weiter - fügen Sie einfach einloggen zuMage::dispatchEvent
Methode - smth likeMage::log($name, null 'your.log')
- damit Sie wissen, welches Ereignis s und in welcher Reihenfolge ausgelöst werden, die auf Ihre Seite<active>false</active>
. Jetzt ist es Arbeit. Ich werde weiterhin auf das speichern-Referenz-Teil. nochmals vielen Dank.Verwenden Sie diesen code in
observer