Magento1: So legen Sie eine Abhängigkeit in einem System-XML mit neuer Erweiterung fest

11

Ich möchte die Erweiterung eines Drittanbieters ändern und deren Funktionalität mit der neuen Erweiterung überschreiben. Aber mein Hauptanliegen ist, was passiert, wenn die Erweiterung eines Drittanbieters nicht aktiviert ist oder in meinem Magento-Ordner vorhanden ist? Ich möchte die Abhängigkeit mithilfe von ifconfig in system.xml oder config.xml festlegen, bin mir jedoch auf Erweiterungsebene nicht sicher, wie überprüft werden soll, ob die Erweiterung im Ordner vorhanden ist. TIA.

EDIT: Danke an @Sander Mangel für die Abhängigkeitsantwort. Lassen Sie mich jetzt klarer sein.

Ich kann die Abhängigkeit einfach mit app / etc / modules / MyNameSpace_MyModule.xml festlegen, aber wenn meine Drittanbietererweiterung aus dem System entfernt wird, wird ein Fehlerbericht generiert und die Anzeige "Modul" MyNameSpace_MyModule "erfordert das Modul" 3rdPartyExtension " und hat die weitere Ausführung gestoppt, da dies der Fall ist generierte Ausnahme, aber was ist, wenn ich weiter ausführen möchte, ohne eine Ausnahme zu generieren? Einfach MyExtension wird nicht wirksam, wenn 3rdpartyextension nicht vorhanden ist, ohne die Ausführung von magento zu stoppen. Deshalb frage ich, ob es irgendeine Möglichkeit gibt, wie wir es bei Layoutdateien getan haben Überprüfen Sie dies. HINWEIS ifconfig hier.

<reference name="sales.order.print">
        <action method="setTemplate" ifconfig="3rdparty/config">
            <template>mytemplate.phtml</template>
        </action>
    </reference>

Zweite Bearbeitung: Danke an Zyava. Ich habe getan, was ich will, aber gesagt, wenn ich meine Drittanbieter-Erweiterung zu Testzwecken gelöscht habe, um zu sehen, was passiert. Ich habe meine system.xml wie folgt erstellt

<config>
   <sections>        
        <payment>
            <groups>
                <3rdparty extension translate="label" module="payment">
                    <label>3rd Party</label>
                    <frontend_type>text</frontend_type>
                    <sort_order>1</sort_order>
                    <show_in_default>1</show_in_default>
                    <show_in_website>1</show_in_website>
                    <show_in_store>1</show_in_store>
                    <fields>                                                
                        <disallowedcustomergroups translate="label comment">
                            <label>Disallowed Customer Groups</label>
                            <frontend_type>multiselect</frontend_type>
                            <sort_order>120</sort_order>
                            <source_model>adminhtml/system_config_source_customer_group</source_model>
                            <config_path>mymodule/disallowed_customer_groups</config_path>
                            <comment><![CDATA[Press control and select multiple groups]]></comment>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                            <depends><active>1</active></depends>
                        </disallowedcustomergroups>                        
                    </fields>
                </3rdpartyextension>
            </groups>
        </payment>        
    </sections>
</config>

Sie sehen also, dass ich einfach eine Registerkarte angegeben habe, die auf der Aktivierung der Drittanbietererweiterung basiert. Aber ich habe die Erweiterung eines Drittanbieters vollständig aus meinem System gelöscht, aber es werden immer noch andere Optionen für Erweiterungen von Drittanbietern angezeigt? Warum werden sie angezeigt, obwohl ich meinen Cache geleert habe?

Kamal Joshi
quelle

Antworten:

14

Soweit ich weiß, was Sie brauchen, sollten Sie ein <dependsTag verwenden, Beispiel aus app/code/core/Mage/Paypal/etc/system.xml:

<payment_action translate="label">
    <label>Payment Action</label>
    <config_path>payment/paypal_express/payment_action</config_path>
    <frontend_type>select</frontend_type>
    <source_model>paypal/system_config_source_paymentActions_express</source_model>
    <sort_order>30</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <shared>1</shared>
</payment_action>

<authorization_honor_period translate="label comment">
    <label>Authorization Honor Period (days)</label>
    <comment>Specifies what the Authorization Honor Period is on the merchant’s PayPal account. It must mirror the setting in PayPal.</comment>
    <config_path>payment/paypal_express/authorization_honor_period</config_path>
    <frontend_type>text</frontend_type>
    <sort_order>50</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <shared>1</shared>
    <depends><payment_action>Order</payment_action></depends> <!-- see this line -->
</authorization_honor_period>
Dmytro Zavalkin
quelle
Vielen Dank ... Ich kann das in Core XML finden, weiß aber nicht genau, was es tut.
Kamal Joshi
Bitte beziehen Sie sich auf meine zweite Bearbeitung ...
Kamal Joshi
Wenn Sie ein payment_actionFeld auswählen Order, wird das Feld authorization_honor_periodsichtbar.
Dmytro Zavalkin
1

Abhängigkeiten können in Ihrer App / etc / modules XML festgelegt werden. Magento prüft, ob die Erweiterung verfügbar ist.

<?xml version="1.0"?>
<config>
    <modules>
        <Your_Extension>
            <active>true</active>
            <codePool>community</codePool>
            <depends>
                <3thparty_Extension/>
            </depends>
        </Your_Extension>
    </modules>
</config>

Oder verwenden Sie den folgenden Code, um zu überprüfen, ob eine Erweiterung aktiviert ist. Dies kann durch Erstellen einer Hilfsmethode in Namespace / Module / Helper / Data.php erfolgen

class Namespace_Module_Helper_Data extends Mage_Core_Helper_Abstract 
{

   public function extensionEnabled()
   {
      return Mage::getStoreConfig('advanced/modules_disable_output/Namespace_Module');
   }
}
Sander Mangel
quelle
Vielen Dank für Ihre Antwort. Was ist, wenn ich überprüfen muss, ob die Erweiterung aktiviert ist oder nicht?
Kamal Joshi
Hey Kamal, du könntest Mage :: getStoreConfig ('advanced / modules_disable_output / Namespace_Module') verwenden. Ich habe den Code in meiner Markise hinzugefügt
Sander Mangel
Ja, das stimmt, aber was ist, wenn ich system.xml wie gewohnt einchecken möchte, können wir layout.xml des Themas mit ifconfig einchecken?
Kamal Joshi
Fügen Sie Ihre Konfigurationsfelder also nur hinzu, wenn die Registerkarte "Drittanbieter" in "System> Konfiguration" vorhanden ist.
Sander Mangel
Kein Actaully möchte weitere Optionen basierend auf der Auswahl bereitstellen.
Kamal Joshi