Magento1:如何在新扩展的系统XML中设置依赖项


11

我想修改第三方扩展,并想用新扩展覆盖其功能。但是我主要担心的是,如果我的Magento文件夹中未启用或存在第3方扩展名怎么办?我想在system.xml或config.xml中使用ifconfig设置依赖关系,但是我不确定在扩展级别如何检查文件夹中是否存在扩展名。TIA。

编辑:感谢@Sander Mangel的依赖关系答案。现在让我更加清楚。

我可以使用app / etc / modules / MyNameSpace_MyModule.xml轻松设置依赖项,但是当我的第三方扩展名从系统中删除时,会生成错误报告,并且其显示的“模块“ MyNameSpace_MyModule”需要模块“ 3rdPartyExtension”并停止进一步执行,原因是生成了异常,但是如果我想进一步执行而不生成异常怎么办?如果不存在不停止magento的情况下不存在3rdpartyextension,那么MyExtension就不会生效。这就是为什么我要问有没有像我们对布局文件所做的那样的设施检查,在此处注意ifconfig。

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

第二编辑:感谢Zyava。我做了我想要的,但是说如果我出于测试目的删除了我的第三方扩展,以查看会发生什么。.我如下创建了system.xml

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

因此,您可以看到我只是基于激活第三方扩展名指定了一个选项卡。但是我已经从系统中完全删除了第三方扩展,但是它仍然显示第三方扩展的其他选项吗?尽管清除了缓存,为什么为什么要显示它们?

Answers:


14

据我了解,您需要使用<depends标记,例如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>

非常感谢...我可以在核心xml中找到它,但不完全知道它的作用。
Kamal Joshi

请参考我的第二份编辑...
Kamal Joshi

如果在payment_action字段中选择Order,则该字段authorization_honor_period变为可见。
Dmytro Zavalkin

1

可以在您的app / etc / modules XML中设置依赖关系。Magento将检查扩展名是否可用。

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

或使用以下代码检查是否启用了扩展。这可以通过在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');
   }
}

感谢您的回答。如果我必须检查扩展名是否启用,该怎么办?
Kamal Joshi

嗨,Kamal,您可以使用Mage :: getStoreConfig('advanced / modules_disable_output / Namespace_Module');。我已经在遮阳篷中添加了代码
Sander Mangel

是的,但是如果我希望像往常一样检入system.xml怎么办,我们可以使用ifconfig检入主题的layout.xml吗?
Kamal Joshi

那么,如果存在“系统”>“配置”中的“第三方”选项卡,则仅添加配置字段?
桑德·曼格尔

没有人真正愿意根据选择提供其他选项
。.– Kamal Joshi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.