2012-04-13 6 views
0

Ich habe mein Bestes getan, um dies herauszufinden, aber ich kann nicht scheinen, um die folgenden Controller zu bekommen in Magento außer Kraft zu setzen:Mage/Kern/Controller/Varien/Aktion in Magento

Mage/Kern/Controller/Varian/Aktion

Im Moment habe ich die folgenden Dateien für meine Erweiterung:

app/local/MyCompany/MyModule/Kern/Controller/Front/action.php

app/local/MyCompany/MyModule/Kern/etc/config.xml

app/etc/modules/MyCompany_MyModule.xml

Meine Verwirrung liegt in der config.xml. Ich habe zuvor Controller überschrieben Verzeichnis Controller Controller. Ich bin nicht völlig klar über den Unterschied oder wenn die Methode zum Überschreiben von Dateien im Controller-Verzeichnis ist anders.

Hier ist, was ich habe in meinem config.xml

<?xml version="1.0"?> 
    <config> 
     <modules> 
      <MyCompany_MyModule> 
       <version>0.0.1</version> 
      </MyCompany_MyModule> 
     </modules> 
     <global> 
      <controller> 
       <Mage_Core> 
        <rewrite> 
         <front_action>MyCompany_MyModule_Core_Controller_Front_Action</front_action> 
        </rewrite> 
       </Mage_Core> 
      </controllers> 
     </global> 
    </config> 

Kann jemand bitte lassen Sie mich wissen, was ich vermisst?

+0

zu ersetzen Was Sie ändern wollen? Es kann einen anderen Weg geben. – benmarks

Antwort

4

Sie können nicht erreichen, was Sie wollen über Magento konfiguriert Klassennamen neu zu schreiben. Wenn Sie bemerken, dass Sie eine Superklasse ändern (andere Klassen erweitern sich daraus), und die Erkennung der Klassendefinition erfolgt durch die automatische Ladelogik von Varien_Autoload::autoload().

Wenn Sie die Definition dieser Klasse ändern müssen, können Sie die gesamte Datei in App/code/local/Mage/Core/Controller/Varien/ kopieren und dort Ihre Änderungen vornehmen. Sie müssen Aktualisierungen zu dieser Klasse bei jedem Upgrade von Magento hinzufügen.

+0

Gut, dass saugt: P Mein Ziel ist es, den Benutzer auf dem Frontend auf eine andere Seite umleiten, wenn ein bestimmter Cookie-Wert nicht existiert. Denken Sie, dass das Überschreiben der Action.php-Klasse die richtige Lösung ist? – Axel

+0

Nun, ich habe beschlossen, den HTML-Block in App/code/core/Mage/Page/Block/Html.php zu überschreiben. Da so ziemlich jede Seite in Magento in den HTML-Block geladen wird, ist es einfach, eine Umleitungsfunktion in die Konstruktionsfunktion für diese Blockklasse zu integrieren. – Axel

+0

Sie können dies * viel * weniger invasiv und in einem viel Framework-orientierten Ansatz tun, indem Sie die Pre-Rendering-Ereignisse beobachten. Siehe 'controller_action_predispatch' Ereignis von' Mage_Core_Controller_Varien_Action'. – benmarks

0

Ich habe auch einmal Controller-Funktionen geändert, aber ich denke, ich habe am Ende nur den ursprünglichen Controller gepatcht, anstatt es zu überschreiben. Ich mag mich irren, aber ich denke, Magento hat keine Unterstützung für das Überschreiben von Controller-Klassen.

Wenn ich mich richtig erinnere, werden sie an einigen Stellen sogar statisch im Code aufgerufen.

+0

Korrekt. Es gibt einen Mechanismus zum Hinzufügen von zusätzlichen Modulverzeichnissen unter einem Frontnamen, aber kein Klassennamenumschreiben wie für Block-, Hilfs-, Modell- und Ressourcenmodelle. – benmarks

0

Da die Erklärung über die magento Controller

class Mage_Catalog_ProductController extends Mage_Core_Controller_Front_Action

Wenn war direkt die Klasse erweitert. Was ich getan habe, ist irgendwie die Controller zu ersetzen.

class Mage_Catalog_ProductController extends MyCompany_Core_Controller_Front_Action

Um alle Steuerungen, I Benutzer diese Linux-Befehl

find app/code/core/Mage/*/controllers/ -name "*.php" -print | xargs sed -i 's/Mage_Core_Controller_Front_Action/MyCompany_Core_Controller_Front_Action/g'

+0

Behebt dies nicht den Zweck, Core-Dateien nicht zu überschreiben? – Axel