วิธีการปิดใช้งานการเขียนซ้ำ (รุ่น) อย่างถูกต้อง


10

มีส่วนขยายของบุคคลที่สามซึ่งเขียนคลาส Magento core เฉพาะใหม่ มันไม่สำคัญว่าจะเป็นบล็อคตัวช่วยหรือโมเดล แต่ในกรณีนี้มันเป็นโมเดล ตอนนี้ฉันพบว่าการเขียนซ้ำนี้ไม่ดีและฉันต้องการปิดการใช้งานโดยไม่เปลี่ยนนามสกุลของบุคคลที่สาม ดังนั้นฉันเขียนส่วนขยายที่กำหนดเองซึ่งขึ้นอยู่กับส่วนขยายของบุคคลที่สาม วิธีที่ดีที่สุดในการปิดการใช้งานการเขียนซ้ำของบุคคลที่สามคืออะไร สิ่งที่ปลอดภัยที่ฉันคิดได้คือการกำหนดการเขียนซ้ำแบบกำหนดเองซึ่งใช้แทนการเขียนโดยบุคคลที่สาม:

<global>
    <models>
        <custom_extension>
            <class>Custom_Extension_Model</class>
        </custom_extension>
        <mage_core>
            <rewrite>
                <sth>Custom_Extension_Model_Sth</sth>
            </rewrite>
        </mage_core>
    </models>
</global>

Sth.phpคลาสจะขยายออกจากคลาส Mage โดยตรงดังนั้นจึงปิดใช้งานการเขียนซ้ำของบุคคลที่สาม:

class Custom_Extension_Model_Sth extends Mage_Core_Model_Sth
{

}

ใช้งานได้ แต่ไม่รู้สึกดีเกินไป ความคิดเกี่ยวกับผู้สังเกตการณ์ก็เป็นไปได้ที่จะปิดการใช้งานพวกเขาเท่านั้นผ่าน config.xml disabledโดยการตั้งค่าให้พวกเขา สิ่งนี้เป็นไปได้ด้วยการเขียนใหม่? ฉันพยายามใช้สิ่งต่อไปนี้และได้ผล:

<global>
    <models>
        <mage_core>
            <rewrite>
                <sth></sth>
            </rewrite>
        </mage_core>
    </models>
</global>

แต่มันปลอดภัยที่จะทำเช่นนั้น? ใช้ได้กับทุกรุ่นหรือไม่ ฉันไม่เคยเห็นว่าในป่านั่นคือเหตุผลที่ฉันถาม

คำตอบ:


1

ตราบเท่าที่โหนดนั้นว่างเปล่าวีโอไอพีที่แท้จริงจะคิดว่าไม่มีการเขียนซ้ำและ 'ใช้คำนำหน้าคลาสเพื่อสร้างชื่อคลาส' ราวกับโหนดนั้นไม่เคยเป็น ในMage_Core_Model_Config::getGroupedClassName.

ฉันคิดว่าอย่างไรก็ตามคุณควรใช้<sth/>แทน<sth></sth>การหยุดการจัดรูปแบบการเปลี่ยนแท็กเพื่อไม่ให้ว่างเปล่า ('\ n' ในสายตาของวีโอไอพี) ซึ่งจะทำให้การเรียนจบลงโดยไม่พบข้อผิดพลาด

ฉันไม่เชื่อว่ามีตัวเลือก 'ปิดใช้งาน' สำหรับผู้ช่วยเหลือบล็อกหรือรุ่น คุณสามารถใช้ผู้สังเกตการณ์ได้ (ซึ่งจะนำการกำหนดค่ากลับมาอย่างที่ควรจะเป็น) แต่ปัญหาที่ฉันเห็นคือคุณบังคับให้โมดูลใด ๆ ที่ต้องการเพิ่มการเขียนใหม่อีกครั้งหลังจากโมดูลของคุณใช้ผู้สังเกตการณ์หรือ เพื่อปิดการใช้งานผู้สังเกตการณ์ของคุณผ่านทาง XML

สิ่งที่ต้องการ:

    public function controllerActionPredispatch(Varien_Event_Observer $event)
    {
        $helper = Mage::helper('webtise_foundationalerts');
        if (! $helper->isAdmin()) {
            $node = Mage::getConfig()->getNode('global/models/core/rewrite');
unset($node->sth);
        }
    }

ดังนั้นสำหรับฉันวิธี XML ชนะ


3

ฉันจะบอกว่าถ้าคุณทำโมดูลที่กำหนดเองเพื่อต่อต้านสิ่งนี้ตรวจสอบให้แน่ใจว่ามันมีการพึ่งพาโมดูลที่มันเขียนทับ

เพื่อป้องกันพฤติกรรมที่ไม่คาดคิดฉันอาจจะนิยามคำว่า 'เหมาะสม' ใหม่

<global>
    <models>
        <mage_core>
            <rewrite>
                <sth>Mage_Core_Model_Sth</sth>
            </rewrite>
        </mage_core>
    </models>
</global>

เมื่อเร็ว ๆ นี้พบปัญหาที่ 1 แท็กเปล่าภายในแท็กอื่นไม่ถูกตรวจพบโดย Magento ส่งคืนnullแทนที่จะเป็นวัตถุที่มีการเตือน ไม่ร้ายแรง แต่อยู่ในโหมดนักพัฒนาซอฟต์แวร์และสำหรับการบันทึกที่ค่อนข้างน่ารำคาญ

แต่ไม่มีหลักฐานอย่างหนักที่นี่เพื่อพิสูจน์วิธีการของคุณจะทำให้เกิดข้อผิดพลาด :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.