Magento 2'de referenceBlock için "adı" bulun


11

Sayfamdan bazı blokları kaldırmak istiyorum. Diyelim ki logo için kapsayıcıyı kaldırmak istiyorum.

Sonra /app/design/frontend/MYVENDORNAME/MYTHEMENAME/Magento_Theme/layout/default.xmlaşağıdaki kod ile oluşturmak :

<page layout="3columns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <referenceBlock name="logo" remove="true"/>
</page>

Bu durumda, Base Theme içindeki dosyaları arayarak bu referans bloğunun adını (name = "logo") bulmayı başardım.

Soru şudur: Blok isimlerini bulmanın daha iyi bir yolu var mı? Magento XMl dosyalarında kullanılan tüm isimlerin bir listesi olması gerektiğini düşündüm? Veya bir tür referans mı?

Diyelim ki menüyü ( <div class="sections nav-sections">...</div>) kaldırmak istiyorum . Bunun adını nasıl öğrenirim


1
u temasında XML dosyasında bulabilirsiniz. menüyü kaldırmak isterseniz bu addır catalog.topnav. Ben temasında temasında modül default.xml içinde bulabilirsiniz.
xanka

Yanıtlar:


17

Bunu yapmak için bir çift yol var:

  1. Tahmin
  2. Temel, Boş ve Luma Temaları için Düzen Düzenleme
  3. Sınıf ve Kimlik Adları için IDE Aramaları Yapma
  4. 'Mağaza için Etkin Şablon Yolu İpuçlarını' ve 'İpuçlarına Blok Adları Ekle'yi etkinleştirin.

Yönetici arayüzüne giriş yapıp aşağıdakilere giderek yol ipuçlarını etkinleştirebilir ve ipuçlarını engelleyebilirsiniz:

Stores > Configuration > Advanced > Developer > Debug

Ne yazık ki, bunları bildiğim kadarıyla kolayca bulmanın kesin bir yolu yok. Her ne kadar çekirdek üzerinde çalışan çocuklar üzerinde çalışıyor gibi görünüyor:

https://github.com/magento/magento2/issues/571


Gareth'in dediği gibi, şablon ve ipuçlarının, kodun o kısmını oluşturduğunu anlamaya çalışmak için şablon yolu ipuçlarını etkinleştirebilirsiniz.
Barbanet

3
'Tahmin et' demeyi seviyorum, yol ipuçları bazı durumlarda oldukça işe yaramaz.
wlin

# 4 ilk aşamada benim için çalışmadı, çünkü IP adresimi
hey

16

Onları nasıl bulacağım ...

İçerik > Widget'lar > Widget
Türü Ekle = CMS Statik Blok
Tasarım Teması = [Temanız]

Devam et

Düzen Güncellemeleri > Düzen
Görünümü Ekle Açık = [Birini Seç]

Sağ tıklayıp inceleyin Kapsayıcı altındaki "Lütfen seçin" konulu. Dev Araçları'ndaki öğeyi
genişletin Tüm value = 's başvuruları, referansKonutucu Adlarınızdır.<select>

:)


Neden bu listede header.panel veya page.wrapper gibi referenceContainers'ı görmüyoruz?
DevonDahon

1
Çok teşekkür ederim! Magento 2 geliştiricilerinin bu adları dokümanlarında bulmak için hızlı bir referans sağlayacağını düşünüyorsunuz.
Yararlı ipucunuz

"Görüntü Açık" açılır menüsünde "Sayfa Düzenleri" ni seçmeniz gerekir, ardından tüm referans kaplarını görürsünüz
Samyer

Teşekkür ederim! Bu benim için bir tedavi çalıştı - şimdi belli!
Freshwebs

Teşekkürler adam, M2 öğrenirken çok güzel ipuçları :)
Şubat'ta

7

Tüm ~ 200'lerin bir listesini almak için aşağıdaki php-cli kodunu çalıştırabilirsiniz referenceBlock. Magento 2 kök klasörünüzün yolunun doğru olduğundan emin olun . Ayrıca değiştirebilir instructionlisteye değişken block, containerve referenceContainer.

<?php

//$instruction = "container";
//$instruction = "referenceContainer";
$instruction = "block";
//$instruction = "referenceBlock";

$path = '/var/www/html/magento2/vendor/magento';
$command = 'cd '.$path.' && egrep -r -i --include \*.xml "<'.$instruction.'".*?"name=" *';
exec($command, $output);

$container_max_length = 1;
$pattern = '/(.*?):.*<'.$instruction.'.*name="(.*?)".*/';
foreach ($output as $subject) {
  preg_match($pattern, $subject, $matches);
  $containers[$matches[2]][] = $matches[1];
  if (strlen($matches[2]) > $container_max_length) $container_max_length = strlen($matches[2]);
}

$n=1;
ksort($containers);
foreach ($containers as $k => $v) {
  printf("%6s", "$n. ");
  printf("%-".$container_max_length."s".$v[0]."\n", $k);
  $i=1;
  while (isset($v[$i])) {
    printf("      %-".$container_max_length."s".$v[$i]."\n", "");
    $i++;
  }
  $n++;
}

?>

1
Cin. Bu yöntem paha biçilemez. Paylaştığınız için çok teşekkür ederim.
crashtestxxx

1
Bu harika teşekkürler çok yararlı süper. Ben tüm site için hepsini metin dosyaları olarak dökümü olacak bir değiştirdim. gist.github.com/LiamKarlMitchell/…
Liam Mitchell

Php / magento'nun belirli bir sürümünü gerektiriyor mu? PHP 7.2.24 + Magento 2.3.3 üzerinde hatayı alıyorum: "PHP Uyarı: ksort () parametre 1 dizisi, 21ho satırında /home/magento/Desktop/list-magento.php içinde verilen null değerini bekliyor" Ve aldım çıktı yok.
Adrian Lopez

4

Bu ücretsiz uzantıyı kullanabilirsiniz:

https://github.com/ho-nl/magento2-Ho_Templatehints

Veya aşağıdaki @blizam widget'larından seçilen bazı referansları yanıtlar:

Sayfa Üstbilgisinden Sonra> page.top

Sayfa Üstbilgisi Sonrası> top.container

Ana Sütunlardan Önce> column.top

Sayfa Altbilgisinden Önce> page.bottom

Sayfa Altbilgisi Kapsayıcısından Önce> page.bottom.container

CMS Altbilgisi Bağlantıları> cms_footer_links_container

Link Wrapper Karşılaştır> karşılaştır-link-wrapper

Ana İçerik Alanı> içerik

Ana İçerik bir yana> content.aside

Ana İçerik Alt> content.bottom

Ana İçerik Kabı> ana

Ana İçerik Yukarı> content.top

Mini araba tanıtım bloğu> minicart.addons

Sayfa Alt> before.body.end

Sayfa Altbilgisi> altbilgi

Sayfa Altbilgi Kapsayıcısı> altbilgi kapsayıcısı

Sayfa Üstbilgisi> üstbilgi sarmalayıcısı

Sayfa Üstbilgisi Kabı> header.container

Sayfa Üstbilgisi Paneli> header.panel

Sayfa Başı> after.body.start

Kenar Çubuğu Ek> sidebar.additional

Kenar Çubuğu Ana Sayfası> sidebar.main


3

XML sayfa yapısını var/log/klasördeki bir günlük dosyasına yazacak küçük bir modül bir araya getirdim .

Uygulamanın / kod / CustomerParadigm / PageXml / etc / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="CustomerParadigm_PageXml" setup_version="1.0.0" schema_version="1.0.0">
        <sequence>
            <module name="Magento_Catalog"/>
            <module name="Magento_Theme"/>
        </sequence>
    </module>
</config>

Uygulamanın / kod / CustomerParadigm / PageXml / etc / events.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="layout_generate_blocks_after">
        <observer name="customerparadigm_layout_generate_blocks_after" instance="CustomerParadigm\PageXml\Model\Layout" />
    </event>
</config>

Uygulamanın / kod / CustomerParadigm / PageXml / registration.php

<?php
    \Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'CustomerParadigm_PageXml',
    __DIR__
);

Uygulamanın / kod / CustomerParadigm / PageXml / Model / Layout.php

<?php

namespace CustomerParadigm\PageXml\Model;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;

class Layout  implements ObserverInterface {
    protected $_logger;

    public function __construct ( \Psr\Log\LoggerInterface $logger ) {
        $this->_logger = $logger;
    }

    public function execute(\Magento\Framework\Event\Observer $observer) {
        $log_file = BP . '/var/log/page_layout.xml';
        if (file_exists($log_file)) {
            unlink($log_file);
        }
        $xml = $observer->getEvent()->getLayout()->getXmlString();
        /*$this->_logger->debug($xml);*/
        $writer = new \Zend\Log\Writer\Stream($log_file);
        $logger = new \Zend\Log\Logger();
        $logger->addWriter($writer);
        $logger->info($xml);
        return $this;
    }
}

Burada çok şaşırtıcı bir şey yok ve geliştirmek için bol miktarda yer olduğundan eminim (yerleşik logger ile çalışma bunlardan biridir) ama bir site geliştirirken benim için iş alır.


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.