কীভাবে কোনও (মডেল) পুনর্লিখন সঠিকভাবে অক্ষম করবেন To


10

একটি তৃতীয় পক্ষের এক্সটেনশান রয়েছে যা একটি নির্দিষ্ট ম্যাজেন্টো কোর শ্রেণীর পুনর্লিখন করে। এটি কোনও ব্লক, সহায়ক বা মডেল কিনা তা বিবেচ্য নয়, তবে এই ক্ষেত্রে এটি একটি মডেল। এখন আমি মুখোমুখি হয়েছি যে এই পুনর্লিখনটি খারাপ এবং আমি তৃতীয় পক্ষের এক্সটেনশন পরিবর্তন না করে এটি অক্ষম করতে চাই। অতএব, আমি একটি কাস্টম এক্সটেনশন লিখি যা তৃতীয় পক্ষের এক্সটেনশনের উপর নির্ভর করে। তৃতীয় পক্ষের পুনরায় লেখার অক্ষম করার সর্বোত্তম উপায় কী? আমি যে নিরাপদটি ভাবতে পারি তা হ'ল একটি কাস্টম পুনর্লিখনকে সংজ্ঞায়িত করা, যা তৃতীয় পক্ষের পুনরায় লেখার পরিবর্তে ব্যবহৃত হয়:

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

}

এটি কাজ করে তবে খুব বেশি ভাল লাগে না। পর্যবেক্ষকদের সম্পর্কে চিন্তাভাবনা করে, কেবল সেগুলি সেট করে কনফিগারেশন.এক্সএমএল এর মাধ্যমে এগুলি অক্ষম করা সম্ভব disabled। পুনরায় লেখার মাধ্যমে কি এরকম কিছু সম্ভব? আমি নিম্নলিখিতটি ব্যবহার করার চেষ্টা করেছি এবং এটি কাজ করে:

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

তবে তা করা কি নিরাপদ? এটি কি সমস্ত সংস্করণে কাজ করে? আমি কখনই দেখিনি যে বন্যের মধ্যে, তাই আমি জিজ্ঞাসা করছি।

উত্তর:


1

নোড হিসাবে আসলং সত্যই ফাঁকা ম্যাজেন্টো মনে করবে যে কোনও পুনর্লিখন ছিল না এবং 'শ্রেণীর নাম গঠনের জন্য শ্রেণীর উপসর্গ ব্যবহার করুন' যদিও নোডটি কখনও তাদের ছিল না। ইন Mage_Core_Model_Config::getGroupedClassName

তবে আমি মনে করি যে ট্যাগটি ফাঁকা না থাকায় ফর্ম্যাট করা বন্ধ করার <sth/>পরিবর্তে আপনার ব্যবহার করা উচিত <sth></sth>(ম্যাজেন্টোর চোখে '\ n') যা কোনও শ্রেণীর ত্রুটি পাওয়া যায়নি তা শেষ করবে।

আমি বিশ্বাস করি না সহায়ক, ব্লক বা মডেলগুলির জন্য একটি 'অক্ষম' বিকল্প রয়েছে। আপনি একটি পর্যবেক্ষকও ব্যবহার করতে পারেন (কনফিগারেশনটি ঠিক কীভাবে হওয়া উচিত তা ফিরিয়ে আনবে) তবে আমি যে সমস্যাটি দেখতে পাচ্ছি তা হ'ল আপনি যে কোনও মডিউলটিকে পুনরায় লিখতে চান তা আপনার মডিউলের পরে আবার পর্যবেক্ষককে ব্যবহার করতে বাধ্য করুন বা এক্সএমএল এর মাধ্যমে আপনার পর্যবেক্ষককে অক্ষম করতে জানুন।

কিছুটা এইরকম:

    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);
        }
    }

সুতরাং আমার জন্য এক্সএমএল উপায় জিতেছে।


3

আমি বলব যদি আপনি এটির মোকাবিলা করার জন্য একটি কাস্টম মডিউল তৈরি করেন তবে এটির ওভাররাইটিং মডিউলটির উপর এটির নির্ভরতা রয়েছে কিনা তা নিশ্চিত করুন।

অপ্রত্যাশিত আচরণ রোধ করার জন্য আমি সম্ভবত সম্ভবত একটি 'যথাযথ' উপায়ে নতুন করে সংজ্ঞা দিতে চাই

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

সম্প্রতি এমন একটি ইস্যু এসেছিল যেখানে অন্য ট্যাগের মধ্যে 1 টি খালি ট্যাগটি ম্যাজেন্টো দ্বারা সনাক্ত করা যায়নি, nullসতর্কতা ছুঁড়ে এমন কোনও বস্তুর পরিবর্তে ফিরে এসেছিল । মারাত্মক নয় তবে বিকাশকারী মোডে এবং লগিংয়ের জন্য বেশ বিরক্তিকর।

তবে আপনার উপায়টি প্রমাণ করার জন্য এখানে কোনও শক্ত প্রমাণই ভুলের কারণ হতে পারে না :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.