Làm thế nào để ngăn chặn mô-đun viết lại xung đột lớp trong Magento


9

Tôi gặp vấn đề viết lại lớp trong Magento Onepage Checkout vì tôi có một mô-đun tùy chỉnh trong nhóm mã cục bộ và phần mở rộng của bên thứ ba trong nhóm mã cộng đồng cả hai đều mở rộng cùng một lớp ...

Tôi đã cố gắng thêm một nút phụ thuộc vào tệp ModuleA_Name.xml của một mô-đun, sau đó mở rộng lớp ModuleB trong tệp Onepage.php nhưng điều này không hoạt động.

Ai đó có thể cho tôi biết cách làm điều này không? Tôi biết có một cách khác để làm điều đó bằng cách sử dụng Observer nhưng tôi thực sự có thể chỉ cần một giải pháp vào lúc này? Ngoài ra, việc tôi sử dụng một phụ thuộc có nguy hiểm không vì ModuleB chỉ có thể được bật cho các cửa hàng / chế độ xem khác nhau, điều đó có nghĩa là mô-đun phụ thuộc sẽ không còn hoạt động?

Cảm ơn trước vì sự giúp đỡ của bạn...

ModuleA

<global>
  <rewrite>
      <moduleA>
          <from><![CDATA[#^/checkout/onepage/#]]></from>
          <to>/moduleA/onepage/</to>
      </moduleA>
      <moduleA>
          <from><![CDATA[#^/checkout/cart/add/#]]></from>
          <to>/moduleA/cart/add/</to>
      </moduleA>
  </rewrite>

Mô-đunB

<global>
    <models>
      <salesrep>
        <class>ModuleB_SalesRep_Model</class>
        <resourceModel>salesrep_mysql4</resourceModel>
      </salesrep>

      <salesrep_mysql4>
        <class>ModuleB_SalesRep_Model_Mysql4</class>
        <entities>
          <salesrep>
            <table>salesrep</table>
          </salesrep>
        </entities>
      </salesrep_mysql4>

      <checkout>
        <rewrite>
          <type_onepage>ModuleB_SalesRep_Model_Type_Onepage</type_onepage>
        </rewrite>
      </checkout>

      <modulebadminthemecontroller>
        <class>LucidPath_SalesRep_Controller</class>
      </modulebadminthemecontroller>
    </models>
</global>

1
OnepageLớp nào cụ thể, khối hay mô hình?
đánh dấu

Câu trả lời:


20

Bạn có 3 lựa chọn để giải quyết xung đột:

  • Hợp nhất mã từ một mâu thuẫn tập tin vào nhau và tắt viết lại config.xml trong một
  • Tắt viết lại trong một tệp cấu hình và sau đó làm cho tệp PHP mở rộng xung đột mở rộng phần mở rộng khác
  • Sử dụng <depends>khả năng để thực hiện một phần mở rộng phụ thuộc vào một phần mở rộng khác. Sau đó họ sẽ viết lại theo thứ tự đó

Ví dụ (tùy chọn # 2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

Bạn sẽ thay đổi nó thành:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

Xem /programming/14815717/multipl-modules-overriding-same-core-file-in-magento


@benmark Tôi đã thêm một số mã từ mỗi tệp config.xml
user1704524

Vâng, tôi đã quản lý để giải quyết vấn đề viết lại lớp bằng cách mở rộng lớp mô-đun với mô
đunB

Vì tôi đang sử dụng OPCheckout và mô-đun xuất hiện trong bước mới nhưng nó không được gọi bởi tệp opcheckout.js vì một số lý do khiến nó bỏ qua bước này. Tôi đã nhìn vào bảng điều khiển và có thể thấy lớp: section allownhưng nó không hoạt động ...
user1704524
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.