Magento1: come impostare una dipendenza in un XML di sistema di nuova estensione


11

Voglio modificare l'estensione di terze parti e voglio sovrascriverne la funzionalità con la nuova estensione. Ma la mia preoccupazione principale è cosa succede se l'estensione di terze parti non è abilitata o presente nella mia cartella Magento? Voglio impostare la dipendenza usando ifconfig in system.xml o config.xml ma non sono sicuro a livello di estensione come verificare se l'estensione è presente nella cartella. TIA.

EDIT: Grazie a @Sander Mangel per la risposta alla dipendenza. Ora vorrei essere più chiaro.

Posso facilmente impostare la dipendenza usando app / etc / modules / MyNameSpace_MyModule.xml ma quando la mia estensione di terze parti viene rimossa dal sistema, viene generato un rapporto di errore e la sua visualizzazione "Modulo" MyNameSpace_MyModule "richiede il modulo" 3rdPartyExtension " e ha interrotto ulteriori esecuzioni perché ha generata l'eccezione ma cosa succede se voglio eseguire ulteriormente senza generare un'eccezione? Semplicemente MyExtension non avrà effetto se la terza parte non è presente senza interrompere l'esecuzione di magento. Ecco perché sto chiedendo che c'è qualche tipo di struttura come abbiamo fatto sui file di layout per Selezionare NOTA ifconfig qui.

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

Seconda modifica: grazie a Zyava. Ho fatto quello che volevo, ma ho detto: se ho eliminato l'estensione di terze parti a scopo di prova per vedere cosa succede .. Ho creato il mio system.xml come di seguito

<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>

Quindi puoi vedere che ho semplicemente specificato una scheda in base all'attivazione dell'estensione di terze parti. Ma ho eliminato completamente l'estensione di terze parti dal mio sistema ma mostra ancora altre opzioni di estensioni di terze parti? Perché li sta mostrando anche se ho cancellato la mia cache?

Risposte:


14

Per quanto ho capito di cosa hai bisogno, dovresti usare il <dependstag, esempio da 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>

Grazie mille ... Posso trovarlo nel core xml ma non so esattamente cosa faccia.
Kamal Joshi,

Si prega di fare riferimento alla mia seconda modifica ...
Kamal Joshi,

Se nel payment_actioncampo selezionato Order, il campo authorization_honor_perioddiventa visibile.
Dmytro Zavalkin,

1

Le dipendenze possono essere impostate nel tuo XML dell'app / etc / module. Magento verificherà se l'estensione è disponibile.

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

Oppure usa il seguente codice per verificare se un'estensione è abilitata. Questo può essere fatto creando un metodo helper in Namespace / Module / Helper / Data.php

class Namespace_Module_Helper_Data extends Mage_Core_Helper_Abstract 
{

   public function extensionEnabled()
   {
      return Mage::getStoreConfig('advanced/modules_disable_output/Namespace_Module');
   }
}

Grazie per la risposta. Cosa succede se devo verificare che l'estensione sia abilitata o no?
Kamal Joshi,

Ehi Kamal, potresti usare Mage :: getStoreConfig ('advanced / modules_disable_output / Namespace_Module') ;. Ho aggiunto il codice nel mio tendalino
Sander Mangel

sì, è vero, e se volessi controllare in system.xml come normalmente possiamo controllare layout.xml del tema usando ifconfig?
Kamal Joshi,

Quindi aggiungere i campi di configurazione solo se è presente la scheda di terze parti nel sistema> configurazione?
Sander Mangel

Nessun altro vuole fornire ulteriori opzioni in base alla selezione.
Kamal Joshi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.