Magento1: Cách đặt phụ thuộc trong XML hệ thống của tiện ích mở rộng mới


11

Tôi muốn sửa đổi tiện ích mở rộng của bên thứ 3 và muốn ghi đè chức năng của nó bằng tiện ích mở rộng mới. Nhưng mối quan tâm chính của tôi là nếu phần mở rộng của bên thứ 3 không được bật hoặc hiện trong thư mục Magento của tôi thì sao? Tôi muốn đặt phụ thuộc bằng cách sử dụng ifconfig trong system.xml hoặc config.xml nhưng tôi không chắc chắn ở cấp độ mở rộng rằng làm thế nào để kiểm tra xem tiện ích mở rộng có trong thư mục hay không. TIA.

EDIT: Cảm ơn @Sander Mangel cho câu trả lời phụ thuộc. Bây giờ hãy để tôi rõ ràng hơn.

Tôi có thể dễ dàng đặt phụ thuộc bằng ứng dụng / etc / mô-đun / MyNameSpace_MyModule.xml nhưng khi tiện ích mở rộng bên thứ 3 của tôi bị xóa khỏi hệ thống, báo cáo lỗi được tạo và hiển thị "Mô-đun" MyNameSpace_MyModule "yêu cầu mô-đun" 3rdPartyExtension " và dừng thực thi thêm. Tạo ngoại lệ nhưng điều gì sẽ xảy ra nếu tôi muốn thực thi thêm mà không tạo ngoại lệ? Đơn giản là MyExtension sẽ không có hiệu lực nếu 3partyextension không có mặt mà không dừng magento để thực thi. Vì vậy, tại sao tôi hỏi là có bất kỳ loại tiện ích nào như chúng tôi đã làm trên các tệp bố cục để kiểm tra. LƯU Ý ifconfig tại đây.

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

Chỉnh sửa thứ hai: Cảm ơn Zyava. Tôi đã làm những gì tôi muốn nhưng nói Nếu tôi xóa tiện ích mở rộng của bên thứ 3 cho mục đích dùng thử để xem điều gì xảy ra .. Tôi đã tạo tệp system.xml của mình như bên dưới

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

Vì vậy, bạn có thể thấy rằng tôi chỉ đơn giản chỉ định một tab dựa trên kích hoạt tiện ích mở rộng của bên thứ 3. Nhưng tôi đã xóa hoàn toàn tiện ích mở rộng của bên thứ 3 khỏi hệ thống của mình nhưng vẫn hiển thị các tùy chọn khác của tiện ích mở rộng bên thứ 3? Tại sao nó hiển thị chúng mặc dù tôi đã xóa bộ nhớ cache của tôi?

Câu trả lời:


14

Theo tôi hiểu những gì bạn cần, bạn nên sử dụng <dependsthẻ, ví dụ từ 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>

Cảm ơn bạn rất nhiều ... Tôi có thể tìm thấy điều đó trong lõi xml nhưng không biết chính xác nó làm gì.
Kamal Joshi

Vui lòng tham khảo bản chỉnh sửa thứ hai của tôi ...
Kamal Joshi

Nếu trong payment_actiontrường bạn chọn Order, trường authorization_honor_periodsẽ hiển thị.
Dmytro Zavalkin

1

Phụ thuộc có thể được đặt trong ứng dụng / etc / mô-đun XML của bạn. Magento sẽ kiểm tra nếu phần mở rộng có sẵn.

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

Hoặc sử dụng mã sau đây để kiểm tra xem tiện ích mở rộng có được bật hay không. Điều này có thể được thực hiện bằng cách tạo một phương thức trợ giúp trong 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');
   }
}

Cảm ơn câu trả lời của bạn .. Điều gì xảy ra nếu tôi phải kiểm tra tiện ích mở rộng có được bật hay không?
Kamal Joshi

Xin chào Kamal, bạn có thể sử dụng Mage :: getStoreConfig ('advanced / Module_disableDefput / Namespace_Module');. Tôi đã thêm mã trong awnser của mình
Sander Mangel

vâng, điều đó đúng nhưng nếu tôi muốn kiểm tra system.xml như bình thường thì chúng ta có thể kiểm tra layout.xml của theme bằng ifconfig không?
Kamal Joshi

Vì vậy, chỉ thêm các trường cấu hình của bạn nếu tab bên thứ 3 trong hệ thống> cấu hình có mặt?
Sander Mangel

Không có hành động nào muốn cung cấp thêm tùy chọn dựa trên lựa chọn ..
Kamal Joshi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.