Magento1: Comment définir une dépendance dans un système XML de nouvelle extension

11

Je souhaite modifier l'extension tierce et je souhaite remplacer sa fonctionnalité par la nouvelle extension. Mais ma principale préoccupation est que se passe-t-il si l'extension tiers n'est pas activée ou présente dans mon dossier Magento? Je veux définir la dépendance en utilisant ifconfig dans system.xml ou config.xml mais je ne suis pas sûr au niveau de l'extension de savoir comment vérifier si l'extension est présente dans le dossier. TIA.

EDIT: Merci à @Sander Mangel pour la réponse de dépendance. Maintenant, permettez-moi d'être plus clair.

Je peux facilement définir la dépendance en utilisant app / etc / modules / MyNameSpace_MyModule.xml mais lorsque mon extension tierce est supprimée du système, un rapport d'erreur est généré et son affichage "Module" MyNameSpace_MyModule "nécessite le module" 3rdPartyExtension " et a arrêté l'exécution car il a généré une exception, mais que faire si je veux exécuter davantage sans générer d'exception? Simplement MyExtension ne prendra pas effet si 3rdpartyextension n'est pas présent sans arrêter magento pour s'exécuter. Vérifiez ifconfig ici.

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

Deuxième édition: Merci à Zyava. J'ai fait ce que je voulais mais dire Si j'ai supprimé mon extension tierce à des fins d'essai pour voir ce qui se passe .. J'ai créé mon system.xml comme ci-dessous

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

Vous pouvez donc voir que j'ai simplement spécifié un onglet basé sur l'activation d'une extension tierce. Mais j'ai supprimé l'extension tierce complètement de mon système, mais il affiche toujours d'autres options d'extensions tierces? Pourquoi leur montre-t-il si j'ai vidé mon cache?

Kamal Joshi
la source

Réponses:

14

Pour autant que je comprenne ce dont vous avez besoin, vous devez utiliser une <dependsbalise, par exemple 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
la source
Merci beaucoup ... Je peux trouver cela dans le noyau xml mais je ne sais pas exactement ce qu'il fait.
Kamal Joshi
Veuillez vous référer à mon deuxième montage ...
Kamal Joshi
Si dans le payment_actionchamp que vous sélectionnez Order, le champ authorization_honor_perioddevient visible.
Dmytro Zavalkin
1

Les dépendances peuvent être définies dans votre application / etc / modules XML. Magento vérifiera si l'extension est disponible.

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

Ou utilisez le code suivant pour vérifier si une extension est activée. Cela peut être fait en créant une méthode d'assistance dans 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
la source
Merci pour votre réponse. Et si je dois vérifier que l'extension est activée ou non?
Kamal Joshi
Hé Kamal, vous pouvez utiliser Mage :: getStoreConfig ('advanced / modules_disable_output / Namespace_Module') ;. J'ai ajouté le code dans mon awnser
Sander Mangel
oui c'est vrai mais que faire si je souhaite archiver system.xml comme d'habitude nous pouvons archiver layout.xml du thème en utilisant ifconfig?
Kamal Joshi
Donc, seulement en ajoutant vos champs de configuration si l'onglet tiers dans le système> la configuration est présent?
Sander Mangel
Pas vraiment vouloir fournir d'autres options en fonction de la sélection ..
Kamal Joshi