วิธีป้องกันความขัดแย้งของคลาสโมดูลใน Magento


9

ฉันมีปัญหาในการเขียนคลาสใน Magento Onepage Checkout เนื่องจากฉันมีโมดูลที่กำหนดเองในพูลโค้ดท้องถิ่นและส่วนขยายของบุคคลที่สามในพูลโค้ดชุมชนทั้งขยายคลาสเดียวกัน ...

ฉันพยายามเพิ่มโหนดที่ต้องพึ่งพาไปยังไฟล์ModuleA_Name.xmlของหนึ่งโมดูลจากนั้นขยายคลาสของModuleBในไฟล์Onepage.phpแต่สิ่งนี้ไม่ได้ผล

มีใครให้ฉันรู้วิธีการทำเช่นนี้ฉันรู้ว่ามีอีกวิธีหนึ่งในการใช้ Observer แต่ตอนนี้ฉันอาจต้องการวิธีแก้ปัญหาจริงๆ? นอกจากนี้มันจะเป็นอันตรายหรือไม่สำหรับฉันที่จะใช้การพึ่งพาเนื่องจากModuleBอาจเปิดใช้งานสำหรับร้านค้า / มุมมองที่แตกต่างกันนั่นหมายความว่าโมดูลที่พึ่งพานั้นจะไม่ทำงานอีกต่อไป

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือ ...

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>

ModuleB

<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
Onepageคลาสใดโดยเฉพาะบล็อกหรือโมเดล
benmarks

คำตอบ:


20

คุณมี 3 ตัวเลือกสำหรับการแก้ไขข้อขัดแย้ง:

  • รวมรหัสจากไฟล์ที่ขัดแย้งกันหนึ่งไฟล์เป็นไฟล์อื่นและปิดการเขียนทับconfig.xmlในครั้งเดียว
  • ปิดการเขียนซ้ำในหนึ่ง config.xml แล้วทำให้ส่วนขยายที่ขัดแย้งกันของไฟล์ PHP ขยายส่วนขยายอื่น ๆ
  • ใช้<depends>ความสามารถในการทำให้ส่วนขยายหนึ่งขึ้นอยู่กับส่วนขยายอื่น พวกเขาจะเขียนใหม่ตามลำดับนั้น

ตัวอย่าง (ตัวเลือก # 2)

class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage

คุณจะเปลี่ยนเป็น:

class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage

ดู/programming/14815717/multiple-modules-overriding-same-core-file-in-magento


@benmarks ฉันได้เพิ่มรหัสจากไฟล์ config.xml แต่ละไฟล์
user1704524

ฉันจัดการเพื่อแก้ปัญหาการเขียนคลาสใหม่ได้โดยขยายคลาสของ moduleA ด้วยโมดุลของ B
user1704524

เนื่องจากฉันใช้ OPCheckout และโมดูลปรากฏขึ้นในขั้นตอนใหม่ แต่ไม่ได้รับการเรียกโดยไฟล์ opcheckout.js ด้วยเหตุผลบางอย่างที่ข้ามขั้นตอน ฉันดูในคอนโซลและสามารถดูคลาส: section allowแต่มันไม่ทำงาน ...
user1704524
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.