Magento 2: कोर ब्लॉक के लिए कस्टम टेम्पलेट कैसे सेट करें


15

मैं अपने मॉड्यूल में register.phtml को ओवरराइड करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि कुछ कॉन्फ़िगरेशन समस्या है जो मैगेंटो को कोर मॉड्यूल में से एक को ओवरराइड करने के लिए मेरे कस्टम टेम्पलेट का उपयोग करने में असमर्थ बनाती है। मैंने कोड की जाँच की है लेकिन समस्या का पता नहीं लगा सकता। कोई मदद कर सकता है? अग्रिम में धन्यवाद। module.xml:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Namespace_ModuleName" setup_version="0.0.2">
        <sequence>
            <module name="Magento_Customer"/>
        </sequence>
    </module>
</config>

customer_account_create.xml नामस्थान \ ModuleName \ view \ frontend \ लेआउट के तहत:

<?xml version="1.0"?>
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="customer_form_register">
        <arguments>

            <argument name="template" xsi:type="string">Namespace_ModuleName::form/register.phtml</argument>

        </arguments>
    </referenceBlock>
</layout>

composer.json:

{
  "name": "namespace/module-modulename",
  "description": "modulename",
  "type": "magento2-module",
  "version": "0.0.2",
  "license": [
    "OSL-3.0",
    "AFL-3.0"
  ],
  "require": {
    "php": "~5.5.0|~5.6.0",
    "magento/framework": "~0.42",
    "magento/magento-composer-installer": "*",
    "magento/module-customer": "*"
  },
  "extra": {
    "map": [
      [
        "*",
        "Namespace/ModuleName"
      ]
    ]
  }
}

जवाबों:


18

referenceBlockनोड की विशेषता के रूप में बस आवश्यक ब्लॉक और सेट टेम्पलेट देखें :

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="customer_form_register" template="VendorName_ModuleName::form/register.phtml"/>
    </body>
</page>

वैकल्पिक वाक्यविन्यास:

<referenceBlock name="customer_form_register">
    <action method="setTemplate">
        <argument name="template" xsi:type="string">VendorName_ModuleName::form/register.phtml</argument>
    </action>
</referenceBlock>

इसके अलावा, यदि आप एंटरप्राइज एडिशन का उपयोग कर रहे हैं, तो सुनिश्चित करें कि यह आपके अंदर डाला Magento_CustomerCustomAttributesजाए क्योंकि यह इस टेम्प्लेट को भी ओवरराइड करता है और आपके परिवर्तनों को ओवरराइड कर सकता है।sequencemodule.xml


1
धन्यवाद एलेक्स, लेकिन यह मेरे लिए काम नहीं करता है। मुझे आश्चर्य है कि मैं कुछ महत्वपूर्ण विवरणों को याद कर रहा हूं जैसे कि कॉन्फ़िगर फ़ाइल या टाइपो।
रिकी। C

बस ऐसे लेआउट हैंडल को कैप्चा मॉड्यूल में डालने की कोशिश की जाती है (इसमें कस्टमर मॉड्यूल पर निर्भरता होती है इसलिए इसे आपके कस्टम मॉड्यूल की तरह लोड किया जाता है) और इसने मेरे लिए काम किया। क्या आपके मॉड्यूल को Magento द्वारा मान्यता प्राप्त है? और निश्चित रूप से पृष्ठ को ताज़ा करने से पहले कैश को साफ़ करना याद रखें। कैप्चा के साथ यह कोशिश करें, बस यह समझने के लिए कि क्या समस्या आपके मॉड्यूल या लेआउट घोषणा के साथ है।
एलेक्स पालीरुष

@ Ricky.C अद्यतन उत्तर देखें, विशेष रूप से ईई के बारे में।
एलेक्स पालिरुष

मैंने वैकल्पिक सिंटैक्स की कोशिश की है, यह मेरे नवीनतम सामुदायिक मैगेंटो 2.0 पर काम करता है। बहुत बहुत धन्यवाद।
रिकी। C

1

इस कोड को अपनी लेआउट फ़ाइल में उपयोग करें:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="customer_form_register">
            <arguments>
                <argument name="template" xsi:type="string">Namespace_ModuleName::form/register.phtml</argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

यह "लेआउट" को "पेज" से बदल देता है और बॉडी टैग को जोड़ता है

संपादित करें: मूल ब्लॉक को हटाने और इच्छित टेम्पलेट के साथ एक नया जोड़ने के लिए दूसरा विकल्प है

<referenceBlock name="customer_form_register" remove="true"/>
<referenceContainer name="content">
    <block class="Magento\Customer\Block\Form\Register" name="my_customer_form_register" template="Namespace_ModuleName::form/register.phtml">
        <container name="form.additional.info" as="form_additional_info"/>
        <container name="customer.form.register.fields.before" as="form_fields_before" label="Form Fields Before" htmlTag="div" htmlClass="customer-form-before"/>
    </block>
</referenceContainer>

आपके उत्तर के लिए धन्यवाद, मैंने इसे आजमाया है लेकिन फिर भी असफल रहा
रिकी। C

2 के समाधान के साथ एक कोशिश है। वैसे, Namespace / ModuleName / view / frontend / templates / form / register.phtml में आपकी टेम्प्लेट फ़ाइल है?
csmarvz

यह अभी भी मेरे लिए विफल रहा है, मुझे लगता है कि क्योंकि मैं एक प्रशासक टेम्पलेट के साथ काम कर रहा हूं। इसलिए मैंने एक और भी वैकल्पिक विधि की कोशिश की: टेम्पलेट को अपने स्वयं के मॉड्यूल में कॉपी करें और फिर ब्लॉक को setTemplateविधि को लागू करने के लिए ओवरराइड करें , जो तब उसी मॉड्यूल में टेम्पलेट पाता है। बहुत गंदा समाधान लेकिन केवल एक चीज जो मेरे लिए काम करती है!
जैक्स

0

आपको <body> टैग के बाद <body> टैग गायब है, कृपया प्रयास करें:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceBlock name="customer_form_register">
        <arguments>

            <argument name="template" xsi:type="string">Namespace_ModuleName::form/register.phtml</argument>

        </arguments>
    </referenceBlock>
</body>
</page>

1
आपके उत्तर के लिए धन्यवाद, यह मेरे लिए भी काम नहीं कर रहा है।
रिकी। C

क्या आपने <लेआउट> टैग को <पृष्ठ> टैग में बदल दिया?
मग सॉल्यूशन

हां, मैंने सिर्फ आपका कोड कॉपी किया और Namespace_ModuleName
Ricky.C

0

सेटटेम्पलेट के तरीकों को ओवरराइड करना मेरे लिए सबसे अच्छा काम करता है।

/ **
 * बिक्री आदेश आइटम नाम स्तंभ रेंडरर
 * /
कक्षा का नाम 
\ Magento \ Sales \ Block \ Adminhtml \ Item \ Column \ Name का विस्तार करता है
{

    सार्वजनिक समारोह setTemplate ($ टेम्पलेट) {
        वापसी माता-पिता :: setTemplate ('Magento_Sales ::'। $ टेम्पलेट);
    }

    / **
     * लाइन ब्रेक और ट्रंकट मान जोड़ें
     *
     * @ अपरम स्ट्रिंग $ मूल्य
     * @ ग्रेट सरणी
     * /
    सार्वजनिक समारोह getFormattedOption ($ मूल्य)
    {
        $ शेष = '';
        $ मूल्य = $ इस-> truncateString (
                 str_replace (';', ';
', $ मूल्य), 1024, '', $ शेष ); वापसी ['मूल्य' => nl2br ($ मूल्य), 'शेष' => nl2br ($ शेष)]; } }

0

मुझे पता है कि यह पुराना है, लेकिन अगर यह किसी की मदद करता है,

यह github जारी करता है magento2 / मुद्दों / 3356 में कहा गया है कि संदर्भबैक और तर्क विधि (प्रश्न में उल्लिखित ) एक बग से ग्रस्त है जैसा कि पदावनत और काम करने की विधि के विपरीत है:

<referenceBlock name="customer_form_login">
    <action method="setTemplate">
        <argument name="template" xsi:type="string">
            VendorName_ModuleName::form/login.phtml
        </argument>
    </action>
</referenceBlock>

प्रलेखन (एक ब्लॉक टेम्पलेट सेट करें) चीजों की वास्तविक स्थिति को प्रतिबिंबित नहीं करता है।


1
हां, नई विधि हमेशा काम नहीं करती है, इसलिए एक का उपयोग नहीं किया जाएगा
TheKitMurkit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.