Magento1: Como definir uma dependência em um sistema XML de nova extensão

11

Quero modificar a extensão de terceiros e substituir sua funcionalidade pela nova extensão. Mas minha principal preocupação é se a extensão de terceiros não estiver ativada ou presente na minha pasta Magento? Eu quero definir a dependência usando ifconfig no system.xml ou config.xml, mas não tenho certeza no nível da extensão de como verificar se a extensão está presente na pasta. TIA.

EDIT: Obrigado a @Sander Mangel pela resposta de dependência. Agora, deixe-me ser mais claro.

Posso definir facilmente a dependência usando app / etc / modules / MyNameSpace_MyModule.xml, mas quando minha extensão de terceiros é removida do sistema, um relatório de erro é gerado e sua exibição "Module" MyNameSpace_MyModule "requer o módulo" 3rdPartyExtension " e interrompeu a execução posterior, pois exceção gerada, mas e se eu quiser executar mais sem gerar exceção? Simplesmente MyExtension não terá efeito se 3rdpartyextension não estiver presente sem interromper a execução do magento. É por isso que estou perguntando se existe algum tipo de instalação, como fizemos nos arquivos de layout para NOTA: ifconfig aqui.

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

Segunda Edição: Agradecimentos a Zyava. Fiz o que quero, mas digo: Se eu excluí minha extensão de terceiros para fins de avaliação, para ver o que acontece .. Criei meu system.xml como abaixo

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

Então você pode ver que eu simplesmente especifiquei uma guia com base na ativação da extensão de terceiros. Mas excluí totalmente as extensões de terceiros do meu sistema, mas ainda está mostrando outras opções de extensões de terceiros? Por que está mostrando a eles que eu limpei meu cache?

Kamal Joshi
fonte

Respostas:

14

Tanto quanto eu entendo o que você precisa, você deve usar <dependstag, exemplo de 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
fonte
Muito obrigado ... Posso encontrar isso no core xml, mas não sei exatamente o que ele faz.
Kamal Joshi
Por favor, consulte o meu segundo editar ...
Kamal Joshi
Se no payment_actioncampo selecionado Order, o campo authorization_honor_periodse torna visível.
Dmytro Zavalkin
1

Dependências podem ser definidas no XML do aplicativo / etc / modules. Magento irá verificar se a extensão está disponível.

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

Ou use o código a seguir para verificar se uma extensão está ativada. Isso pode ser feito criando um método auxiliar em 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');
   }
}
Sander Mangel
fonte
Obrigado pela sua resposta. E se eu tiver que verificar se a extensão está ativada ou não?
precisa saber é o seguinte
Olá Kamal, você pode usar Mage :: getStoreConfig ('advanced / modules_disable_output / Namespace_Module') ;. Eu adicionei o código na minha awnser
Sander Mangel
Sim, isso é verdade, mas e se eu quiser fazer o check-in no system.xml como normalmente, podemos fazer o check-in no layout.xml do tema usando o ifconfig?
precisa saber é o seguinte
Então, apenas adicionando seus campos de configuração se a guia 3ª parte em system> configuration estiver presente?
Sander Mangel
Sem actaully quer fornecer mais opções com base na selecção ..
Kamal Joshi