Magento 2: Çekirdek bloğu için özel şablon nasıl ayarlanır


15

Modülümdeki register.phtml'yi geçersiz kılmaya çalışıyorum, ancak Magento'nun çekirdek modüldeki birini geçersiz kılmak için özel şablonumu kullanamamasını sağlayan bazı yapılandırma sorunu var gibi görünüyor. Kodu kontrol ettim ama sorunu bulamıyorum. Herkes yardım edebilir mi? Şimdiden teşekkürler. 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>

Namespace \ ModuleName \ view \ frontend \ layout altında customer_account_create.xml:

<?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"
      ]
    ]
  }
}

Yanıtlar:


18

Sadece gerekli blok referans ve şablon referenceBlockdüğümü niteliği olarak ayarlayın :

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

Alternatif sözdizimi:

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

Enterprise Edition kullanıyorsanız Ayrıca, koymak emin olun Magento_CustomerCustomAttributesetmek sequenceGözlerinde farklı module.xmlo da bu şablonu kıldığından ve değişiklikleri geçersiz kılabilir.


1
Teşekkürler Alex, ama benim için çalışmıyor. Merak ediyorum yapılandırma dosyası veya yazım hatası var gibi bazı önemli ayrıntıları kaçırdım.
Ricky.C

Sadece Captcha modülüne böyle bir düzen kolu koymaya çalıştı (Müşteri modülüne bağımlıdır, bu yüzden özel modülünüz gibi yüklenir) ve benim için çalıştı. Modülünüz Magento tarafından hiç tanınıyor mu? Ve elbette sayfayı yenilemeden önce önbelleği temizlemeyi unutmayın. Sorunun modül veya mizanpaj beyanınızla ilgili olup olmadığını anlamak için bunu Captcha ile deneyin.
Alex Paliarush

@ Ricky.C özellikle EE ile ilgili güncellenmiş cevaba bakınız.
Alex Paliarush

Alternatif sözdizimini denedim, en son Community Magento 2.0 üzerinde çalışıyor. Çok teşekkürler.
Ricky.C

1

Bunun yerine mizanpaj dosyanızda bu kodu kullanın:

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

"Düzen" i "sayfa" ile değiştirir ve gövde etiketini ekler

DÜZENLEME: 2. alternatif orijinal bloğu kaldırmak ve istenen şablonla yeni bir blok eklemektir

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

Cevabınız için teşekkürler, denedim ama hala başarısızım
Ricky.C

2. çözümü deneyin. Bu arada, şablon dosyanız Namespace / ModuleName / view / frontend / templates / form / register.phtml dosyasında mı?
csmarvz

Bu hala benim için başarısız oldu, sanırım çünkü bir adminhtml şablonu ile çalışıyorum. Bu yüzden daha da alternatif bir yöntem denedim: Şablonu kendi modülüme kopyalayın ve daha setTemplatesonra aynı modülde şablonu bulan yöntemi çağırmak için Bloğu geçersiz kılın . Çok kirli bir çözüm ama benim için işe yarayan tek şey!
Jacques

0

<Page> etiketinden sonra <body> etiketini eksik, lütfen deneyin:

<?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
Cevabınız için teşekkürler, bu benim için de işe yaramıyor.
Ricky.C

<Layout> etiketini <page> etiketine değiştirdiniz mi?
Mage Solution

Evet, kodunuzu kopyaladım ve Namespace_ModuleName
Ricky.C'yi

0

SetTemplate yöntemlerini geçersiz kılmak benim için en iyisidir.

/ **
 * Müşteri Siparişi kalemleri adı sütun oluşturucu
 * /
sınıf adı 
\ Magento \ Sales \ Block \ Adminhtml \ Items \ Column \ Name öğesini genişletir
{

    public function setTemplate ($ template) {
        return parent :: setTemplate ('Magento_Sales ::'. $ şablon);
    }

    / **
     * Satır kesmeleri ve kesme değeri ekleme
     *
     * @param string $ değeri
     * @return dizisi
     * /
    public function getFormattedOption ($ değer)
    {
        Kalan $ = '';
        $ value = $ this-> truncateString (
                 str_replace (';', '; 
', $ değeri), 1024, '', kalan ); dönüş ['değer' => nl2br ($ değer), 'remainder' => nl2br (kalan $)]; } }

0

Bunun eski olduğunu biliyorum, ama birine yardım ederse,

Bu github sorunu magento2 / konular / 3356 o devletler referenceBlock ve argümanlar yöntemi (Söz konusu mentionned) kaldırılmış ve çalışma yönteme nazaran bir böcekten elde uğrar:

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

dokümantasyon (Bir blok şablonu ayarla) , durumun gerçek durumunu yansıtmaz.


1
evet, yeni yöntem her zaman işe yaramıyor, bu yüzden kullanımdan kaldırılmış bir tane kullanmalıyız
TheKitMurkit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.