ইতিমধ্যে নতুন করে লেখা ক্লাসটি কীভাবে পুনর্লিখন করবেন?


15

আপডেট: আমি দেখতে পেয়েছি যে আমার কাছে যে ক্লাসটি পুনরায় লেখার দরকার তা হ'ল এটির মতো SMDesign_SMDZoom_Block_Product_View_Mediaনয় SMDesign_ColorswatchProductView_Block_Product_View_Mediaযা আমি মূলত ভেবেছিলাম। তবে ঠিক একই বিষয়টি এখনও প্রযোজ্য।

এসএমডি ডিজাইন এসএমডিজুম এক্সটেনশান ব্লক ক্লাস 'ক্যাটালগ / পণ্য_দর্শন_মিডিয়া' পুনর্লিখন করে। এর জন্য এক্সএমএল দেখতে:

       <global>
    ...         
       <blocks>
        <smdzoom>
            <class>SMDesign_SMDZoom_Block</class>
        </smdzoom>
    </blocks>
    <blocks>
        <catalog>
            <rewrite>
                <product_view_media>SMDesign_SMDZoom_Block_Product_View_Media</product_view_media>
            </rewrite>
        </catalog>
    </blocks>
           ....
       </global>

আমি এই ক্লাসটি আবার লিখতে চাই। আমি ক্যাটালগ / প্রোডাক্ট_ভিউ_মিডিয়া ক্লাসটি আবার লিখতে চাই যে এই এসএমডিজুম মডিউলটি পুনরায় লিখছে। এই কাজ করা যাবে? এটি করতে আমার মডিউলটিতে কনফিগার এক্সএমএল দেখতে কেমন হবে?

বর্তমানে এটি আমার মডিউল থিম এক্সএমএল ফাইল:

<config>
    <modules>
        <Goorin_SMDZoom>
            <active>true</active>
            <codePool>local</codePool>
        </Goorin_SMDZoom>
        <depends>
            <Mage_Catalog />
            <SMDesign_SMDZoom />
        </depends>
    </modules>
</config>

এবং মডিউল config.xml ফাইল:

<global>
        <blocks>
            <gbismdzoom>
                <class>Goorin_SMDZoom_Block</class>
            </gbismdzoom>
            <catalog>
                <rewrite>
                    <product_view_media>Goorin_SMDZoom_Block_Product_View_Media</product_view_media>
                </rewrite>
            </catalog>
        </blocks>
    </global>

আমার নতুন ক্লাসটি কেবল পরীক্ষার জন্য এটির মতো দেখাচ্ছে:

class Goorin_SMDZoom_Block_Product_View_Media extends SMDesign_SMDZoom_Block_Product_View_Media
{
    public function _construct() {
        parent::_construct();
    }
}

আমি টেমপ্লেট পাথের ইঙ্গিতগুলি প্রদর্শন করে এটি পরীক্ষা করছি এবং আমি দেখছি এসএমডি ডিজাইন ব্লকটি পণ্য ভিউ পৃষ্ঠায় এখনও ব্যবহৃত হচ্ছে। আমি কি ভুল করছি?

উত্তর:


13

আমি <depends>আমার মডিউলটির init xML ফাইলটিতে নোডটিকে ভুল জায়গায় রেখেছি। এটি মডিউল নামের নোডের মধ্যে অবশ্যই থাকতে হবে:

<config>
    <modules>
        <Goorin_SMDZoom>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog />
                <SMDesign_SMDZoom />
            </depends>
        </Goorin_SMDZoom>
    </modules>
</config>

10

এই অংশটি এখানে:

        <colorswatchproductview>
            <rewrite>
                <product_view_media>Goorin_ColorswatchProductView_Block_Product_View_Media</product_view_media>
            </rewrite>
        </colorswatchproductview>

কেবলমাত্র তখনই আপনাকে সহায়তা করবে যদি প্রথম ইনস্ট্যান্টটি createBlock('colorswatchproductview/product_view_media)
পুনরায় লেখার জন্য ব্যবহার করা হয়, কারণ এটির মাধ্যমে আসল ইনস্ট্যান্টেশনটি সম্পন্ন করা অসম্ভব, কারণ যেখানেই
createBlock('catalog/product_view_media')ব্যবহৃত হয়েছে সেগুলি যেখানেই প্রদর্শিত হবে

একটি বিকল্প একই ব্লকের জন্য একটি পুনর্লিখন ব্যবহার করা হবে

  <catalog>
    <rewrite>
      <product_view_media>Goorin_ColorswatchProductView_Block_Product_View_Media</product_view_media>
    </rewrite>
  </catalog>

এবং তারপরে আপনার ব্লক শ্রেণিতে অন্যান্য এক্সটেনশন ব্লকটি প্রসারিত করুন

class Goorin_ColorswatchProductView_Block_Product_View_Media extends SMDesign_ColorswatchProductView_Block_Product_View_Media

এটি কাজ করার জন্য আপনার এক্সটেনশানটি প্রথমটির পরে লোড করা দরকার। আমার এখানে পরীক্ষার সময় http://magebase.com/magento-tutorials/magento-extension-clashes-winners-and-loosers/ আমি কাজ লোড অর্ডার আপনার অ্যাপ জন্য / etc / মডিউল / XML ফাইলের ক্রম অনুযায়ী উপর ভিত্তি করে তৈরি । বিকল্পভাবে এই অর্ডারটি ডিপেন্ডস নোড (এসএমডি ডিজাইন_ইল্যান্ডওয়্যাচপ্রডাক্টভিউ) ব্যবহার করে প্রভাবিত হতে পারে।

আপনি ত্রুটি বার্তাটি দেখছেন যেহেতু আপনি ব্লককে বিচ্ছিন্নভাবে রেন্ডার করার চেষ্টা করছেন তবে এটির জন্য এমন একটি পণ্য প্রয়োজন যা এটি তার প্যারেন্ট ব্লক থেকে লোড করে:

abstract class Mage_Catalog_Block_Product_View_Abstract extends Mage_Catalog_Block_Product_Abstract
{
    /**
     * Retrive product
     *
     * @return Mage_Catalog_Model_Product
     */
    public function getProduct()
    {
        $product = parent::getProduct();
        if (is_null($product->getTypeInstance(true)->getStoreFilter($product))) {
            $product->getTypeInstance(true)->setStoreFilter(Mage::app()->getStore(), $product);
        }

        return $product;
    }

আমি আপনার নির্দেশাবলী বন্ধ করে দিয়েছি এবং এমনকি নির্ভরশীল নোড দিয়েও ক্লাসটি পুনরায় লিখতে পারি না।
নিক রোল্যান্ডো

ক্যাশে রিফ্রেশের পরে আপনার মডিউল init xML ফাইলটির নাম z.xML এ নামকরণ করার চেষ্টা করুন।
ক্রিস্টফ ফুমানে

দুঃখিত আমি কিছুক্ষণের মধ্যে এই ফিরে পেতে না। আমি init xML ফাইলটির নাম zzz.xML এ রেখেছি এবং পুনরায় লেখার কাজ হয়েছে! সুতরাং আমার অনুমান যে <depends>নোড কেন কাজ করছে না তা বুঝতে আমার প্রয়োজন হবে ..
নিক রোল্যান্ডো

সাহায্যের জন্য আমি +1 ধন্যবাদ এবং আমাকে উত্তরে নেতৃত্ব দিচ্ছি :)
নিক রোল্যান্ডো

3

কোর ক্লাসগুলি পুনরায় লেখার কারণে এটি সফল হয়।

এখানে হিপ থেকে শুটিং করেছেন তবে আমি মনে করি আপনার সেরা বেট হ'ল রঙের স্য্যাচ বাস্তবায়নটি প্রসারিত করা Mage_Catalog_Blog_Product_View_Mediaএবং তারপরে আপনার মডিউলটিকে রঙের সোয়াচ মডিউলটির উপর নির্ভর করবে।

অ্যালান স্টর্ম এখানে একটি অনুরূপ প্রশ্নের উত্তর দিয়েছেন ।

এমনকি কোনও পর্যবেক্ষকের মাধ্যমে আপনি যা করার চেষ্টা করছেন তা করা এবং করা আরও ভাল।

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