कस्टम मॉड्यूल से कोर टेम्पलेट फ़ाइलों को कैसे अधिलेखित करें?


10

मैं दो फाइलों को अधिलेखित करना चाहता हूं। अर्थात् view.phtmlऔर print.phtmlबिक्री आदेश की।
(पथ: app/design/frontend/base/default/template/sales/order/)

मैं एक मॉड्यूल बना रहा हूं जिसमें मैं एक रास्ता बनाना चाहता हूं app/design/frontend/base/default/template/<My Module Name>/sales/order/ताकि कोर view.phtmlऔर print.phtmlफाइलें अधिलेखित न हों।

तो कृपया मुझे मार्गदर्शन करें कि इस कार्य को कैसे प्राप्त किया जाए।

जवाबों:


13

आप अपने मॉड्यूल के अंदर एक लेआउट XML फ़ाइल के साथ ऐसा कर सकते हैं। आपको अपने मॉड्यूल के अनुभाग को config.xmlइस तरह से करने की आवश्यकता है ताकि Magento अपने मॉड्यूल के लेआउट XML (पथ:) को लोड कर सके app/design/frontend/base/default/layout/mymodulename.xml:

<config>
    [...]
    <frontend>
        [...]
        <layout>
            <updates>
                <mymodulename_layout module="MyModuleName">
                    <file>mymodulename.xml</file>
                </mymodulename_layout>
            </updates>
        </layout>
    </frontend>

इस लेआउट एक्सएमएल फ़ाइल में आप विशिष्ट ब्लॉकों को संदर्भित कर सकते हैं और उनके टेम्पलेट को बदल सकते हैं।

<layout>
    <sales_order_view>
        <reference name="sales.order.view">
            <action method="setTemplate">
                <template>mymodulename/sales/order/view.phtml</template>
            </action>
        </reference>
    </sales_order_view>
    <sales_order_print>
        <reference name="sales.order.print">
            <action method="setTemplate">
                <template>mymodulename/sales/order/print.phtml</template>
            </action>
        </reference>
    </sales_order_print>
</layout>

@ 7ochem, magento2 में समान कैसे प्राप्त करें?
प्रसाद मगंती

आपको इसे एक नए प्रश्न के रूप में पूछना चाहिए क्योंकि इसे यहां टिप्पणी में रखना बहुत व्यापक है और ओपी पूछ रहा है कि क्या नहीं है
7ochem

3

मान लीजिए कि हमारा मॉड्यूल नाम 'CustomSales' और पैकेज का नाम "व्यायाम" है।

चरण 1: एप्लिकेशन / etc / मॉड्यूल / Exercise_CustomSales.xml में एक मॉड्यूल कॉन्फ़िगरेशन फ़ाइल बनाएं

<config>
<modules>
    <Exercise_CustomSales>
        <active>true</active>
        <codePool>local</codePool>
    </Exercise_CustomSales>
</modules>

चरण 2: एप्लिकेशन / कोड / स्थानीय / व्यायाम / CustomSales / etc / config.xml के तहत एक विन्यास फ़ाइल बनाएं

<config>
<modules>
    <Exercise_CustomSales>
        <version>1.7.0.2</version>
    </Exercise_CustomSales>
</modules>
<global>
    <blocks>
        <customsales>
            <class>Exercise_CustomSales_Block</class>
        </customsales>
        <sales>
            <rewrite>
                <order_view>Exercise_CustomSales_Block_Sales_Order_View</order_view>
            </rewrite>
        </sales>
    </blocks>
</global>

चरण 3: एक php फ़ाइल बनाएँ, जो वास्तविक view.phtml फ़ाइल, ऐप / कोड / स्थानीय / व्यायाम / CustomSales / ब्लॉक / बिक्री / आदेश / View.php को अधिलेखित करे।

क्लास एक्सरसाइज_कस्टमसूल_ब्लॉक_सेल्स_ऑडर_दृश्य
{
    संरक्षित फ़ंक्शन _construct ()
    {
        माता-पिता :: _ निर्माण ();
        $ This-> setTemplate ( 'customsales / बिक्री / आदेश / view.phtml');
    }
}

चरण 4: आपको लेआउट फ़ोल्डर के अंदर एक स्थानीय। Xml फ़ाइल बनाना चाहिए (संभव पथ: ऐप / डिज़ाइन / फ्रंटेंड / पैकेज / थीम / लेआउट)। यह Print.phtml के लिए है।

उदाहरण के लिए (ऐप / डिज़ाइन / फ्रंटएंड / आरडब्ल्यूडी / डिफॉल्ट / लेआउट / लोकल। एक्सएमएल)

<layout>
<sales_order_print>
    <reference name="sales.order.print">
        <action method="setTemplate">
            <template>customsales/sales/order/print.phtml</template>
        </action>
    </reference>
</sales_order_print>

"ऐप / डिज़ाइन / फ्रंटेंड / पैकेज / थीम / टेम्पलेट / सीमा शुल्क / बिक्री / ऑर्डर" के अंदर view.phtml और print.phtml फ़ाइल ले जाएँ।

Magento के कैश को साफ़ करें।


पूरे ब्लॉक को फिर से लिखने की कोई जरूरत नहीं है। मेरे उत्तर में Mage_Sales_Block_Order_Viewपहले प्राप्त करने वाले का निर्माण और टेम्पलेट सेट करना, फिर setTemplateमेरे उदाहरण से लेआउट एक्सएमएल द्वारा आरंभ किया जाना और कस्टम टेम्पलेट सेट करना। मैं उन समाधानों के लिए जाना चाहता हूं जो पुनर्लेखन का उपयोग नहीं करते हैं क्योंकि वे संभावित रूप से टकराव का कारण बन सकते हैं।
7ochem

7ochem सही है। टेम्पलेट को ब्लॉक में सेट करने की आवश्यकता नहीं है। 7ochem का समाधान अच्छा है और इसने मेरे लिए काम किया।
राजन फाल्दू

यह आप पर निर्भर करता है। यदि आप कुछ php विधि को अधिलेखित करते हैं या जोड़ते हैं तो आपको ब्लॉक को अधिलेखित करने की आवश्यकता है अन्यथा आप मॉड्यूल.xml या local.xml के माध्यम से टेम्पलेट बदलते हैं। मेरा समाधान किसी भी Magento संस्करण को प्रभावित नहीं करता है, मुझे लगता है।
सोहेल राणा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.