Scopri il "nome" per un blocco di riferimento in Magento 2


11

Voglio rimuovere alcuni blocchi dalla mia pagina. Supponiamo ad esempio che desidero rimuovere il contenitore per il logo.

Quindi creo /app/design/frontend/MYVENDORNAME/MYTHEMENAME/Magento_Theme/layout/default.xmlcon il seguente codice:

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

In questo caso sono riuscito a scoprire il nome (name = "logo") di questo blocco di riferimento cercando tra i file nel tema di base.

La domanda è: esiste un modo migliore per scoprire i nomi dei blocchi. Immagino che ci debba essere un elenco di tutti i nomi utilizzati nei file XMl in Magento? O qualche tipo di riferimento?

Di 'ad esempio che vorrei rimuovere il menu ( <div class="sections nav-sections">...</div>). Come faccio a scoprire il nome di quello


1
puoi trovarlo nel file XML nel tema di base. se ti piace rimuovere il menu questo nome è catalog.topnav. lo trovo in default.xml nel modulo Tema nella base.
xanka,

Risposte:


17

Ci sono un paio di modi per farlo:

  1. Indovina
  2. Rivedi layout per temi Base, Blank e Luma
  3. Esegui ricerche IDE per nomi di classi e ID
  4. Abilita "Suggerimenti percorso modello abilitato per Storefront" e "Aggiungi nomi blocchi ai suggerimenti".

Puoi abilitare i suggerimenti sul percorso e bloccare i suggerimenti accedendo all'interfaccia di amministrazione e andando a:

Stores > Configuration > Advanced > Developer > Debug

Sfortunatamente, non c'è ancora alcun modo infallibile per trovarli facilmente, per quanto ne so. Anche se sembra che i ragazzi che lavorano al core ci stiano lavorando:

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


Come ha detto Gareth, puoi abilitare i suggerimenti sul percorso del modello per provare a capire quale modello e blocco sta eseguendo il rendering di quella parte del codice.
Barbanet,

3
Mi piace come hai detto "indovina", in alcuni casi i suggerimenti sul percorso sono piuttosto inutili.
wlin,

# 4 non ha funzionato per me in primo luogo, perché non ho autorizzato il mio IP come descritto qui: docs.magento.com/m2/ee/user_guide/system/…
hey

15

Ecco come li trovo ...

Contenuto > Widget > Aggiungi
tipo di widget = CMS Static Block
Design Theme = [Your Theme]

Continua

Aggiornamenti layout > Aggiungi
visualizzazione layout attivata = [Scegli uno]

Fare clic destro Ispezionare su "Seleziona" sotto Container.
Espandi l' <select>elemento in Strumenti di sviluppo
Tutte le opzioni value = 's sono i tuoi nomi ReferenceContainer.

:)


Perché non vediamo referenceContainer come header.panel o page.wrapper in questo elenco?
DevonDahon,

1
Grazie mille! Pensi che gli sviluppatori di Magento 2 possano fornire un rapido riferimento per trovare questi nomi nei loro documenti. Molto apprezzato per il tuo suggerimento utile :)
Jonathan Marzullo,

Devi selezionare "Layout di pagina" nel
menu a

Grazie! Questo ha funzionato a meraviglia per me - ovvio ora!
Freshwebs

Grazie amico, consigli molto carini nell'apprendimento di M2 :)
punibile il

7

Puoi eseguire il codice php-cli qui sotto per ottenere un elenco di tutti i ~ 200 referenceBlock. Assicurati che il percorso della cartella principale di Magento 2 sia corretto. È inoltre possibile modificare la instructionvariabile lista block, containere 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
Genio. Questo metodo non ha prezzo. Grazie mille per la condivisione.
crashtestxxx,

1
Questo è fantastico grazie molto super utile. L'ho modificato in uno che li avrebbe scaricati tutti come file di testo per l'intero sito. gist.github.com/LiamKarlMitchell/…
Liam Mitchell

Richiede una versione specifica di php / magento? Su PHP 7.2.24 + Magento 2.3.3 ottengo l'errore: "Avviso PHP: ksort () si aspetta che il parametro 1 sia array, null dato in /home/magento/Desktop/list-magento.php sulla linea 21" E ottenuto nessuna uscita.
Adrian Lopez,

4

Puoi usare questa estensione gratuita:

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

O seguendo @blizam rispondi ad alcuni riferimenti scelti dai widget:

Dopo intestazione pagina> page.top

Dopo intestazione pagina Top> top.container

Prima di Main Columns> columns.top

Prima del piè di pagina> page.bottom

Prima del contenitore del piè di pagina> page.bottom.container

Collegamenti piè di pagina CMS> cms_footer_links_container

Compare Link Wrapper> compare-link-wrapper

Area contenuto principale> contenuto

Contenuto principale A parte> content.aside

Contenuto principale in basso> content.bottom

Contenitore contenuto principale> principale

Contenuto principale Top> content.top

Blocco promozione mini-carrello> minicart.addons

Pagina in basso> before.body.end

Piè di pagina> piè di pagina

Contenitore piè di pagina> piè di pagina-contenitore

Intestazione pagina> wrapper di intestazione

Contenitore intestazione pagina> header.container

Pannello di intestazione della pagina> header.panel

Inizio pagina> after.body.start

Barra laterale aggiuntiva> sidebar.additional

Barra laterale principale> sidebar.main


3

Ho messo insieme un piccolo modulo che scriverà la struttura della pagina XML in un file di registro nella var/log/cartella.

app / code / 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>

app / code / 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>

app / code / CustomerParadigm / PageXml / registration.php

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

app / code / CustomerParadigm / PageXml / Modello / 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;
    }
}

Non sta succedendo nulla di straordinario qui, e sono sicuro che ci sia molto spazio per migliorare (lavorare con il logger integrato è uno di questi) ma fa il lavoro per me quando sto sviluppando un sito.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.