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?

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>

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');
   }
}

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.