Дізнайтеся "ім'я" для довідкового блоку в Magento 2


11

Я хочу видалити деякі блоки зі своєї сторінки. Скажіть, наприклад, що я хочу видалити контейнер для логотипу.

Потім я створюю /app/design/frontend/MYVENDORNAME/MYTHEMENAME/Magento_Theme/layout/default.xmlтакий код:

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

У цьому випадку мені вдалося знайти ім’я (name = "логотип") цього опорного блоку шляхом пошуку файлів у Base Theme.

Питання: чи є кращий спосіб дізнатися назви блоків. Я вважаю, що повинен бути список усіх імен, що використовуються у файлах XMl в Magento? Або якась довідка?

Скажіть, наприклад, що я хотів би видалити меню ( <div class="sections nav-sections">...</div>). Як дізнатися назву цього


1
Ви можете знайти його у файлі XML в базовій темі. якщо ви хочете видалити меню, це ім'я catalog.topnav. Я знаходжу його у default.xml у модулі Тема в базі.
xanka

Відповіді:


17

Є кілька способів зробити це:

  1. Вгадайте
  2. Огляньте макет основних тем, пустих і гумових тем
  3. Виконайте пошуки IDE для імен класів та ідентифікаторів
  4. Увімкніть "Увімкнено підказки до шаблону для підказки до магазину" та "Додати імена блоків у підказки".

Можна ввімкнути підказки шляхів та підказки блоку, увійшовши в інтерфейс адміністратора та перейшовши до:

Stores > Configuration > Advanced > Developer > Debug

На жаль, все ще немає надійного способу їх легко знайти, наскільки я знаю. Хоча схоже, що хлопці, які працюють над основними, до цього:

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


Як сказав Гарет, ви можете включити підказки шляху до шаблону, щоб спробувати з'ясувати, який шаблон і блок відображає цю частину коду.
Барбанет

3
Мені подобається, як ти сказав "здогадайся", натяки на шлях у деяких випадках є марними.
wlin

№4 не працював для мене в першу чергу, тому що я не додав до
ей

16

Ось як я їх знаходжу ...

Вміст > Віджети > Додати
тип віджету =
Тема дизайну статичного блоку CMS = [Ваша тема]

Продовжуйте

Оновлення макета > Додати
відображення відображення макета = [Вибрати один]

Клацніть правою кнопкою миші Оглянути на "Будь ласка, виберіть" під контейнером.
Розгорніть <select>елемент у інструментах Dev.
Усі опції value = 's - це ваші імена referenceContainer.

:)


Чому ми не бачимо у цьому списку referenceContainers, як header.panel або page.wrapper?
DevonDahon

1
Велике спасибі! Ви думаєте, що magento 2 devs забезпечив би коротку довідку, щоб знайти ці імена у своїх документах. Дуже вдячний за вашу корисну пораду :)
Джонатан Марцулло

Вам потрібно вибрати "Макет сторінки" у спадному меню "Відображення
ввімкнено

Дякую! Це спрацювало для мене частування - очевидно зараз!
Freshwebs

Дякую людині, дуже приємні поради при вивченні M2 :)
карається

7

Ви можете виконати код php-cli нижче, щоб отримати список усіх ~ 200 referenceBlock. Переконайтесь, що шлях до кореневої папки Magento 2 правильний. Ви можете також змінити instructionзмінну в список block, containerі 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
Геніальність. Цей спосіб настільки безцінний. Дуже дякую вам за спільний доступ.
crashtestxxx

1
Це дивовижне спасибі дуже корисно. Я змінив його в один, який викине їх усіх як текстові файли для всього сайту. gist.github.com/LiamKarlMitchell/…
Ліам Мітчелл

Чи потрібна якась конкретна версія php / magento? На PHP 7.2.24 + Magento 2.3.3 я отримую помилку: "Попередження PHP: ksort () очікує, що параметр 1 буде масивом, нуль задано в /home/magento/Desktop/list-magento.php у рядку 21" І отримав немає виходу
Адріан Лопес

4

Ви можете використовувати це безкоштовне розширення:

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

Або після @blizam відповісти на деякі посилання, вибрані з віджетів:

Після Заголовок сторінки> page.top

Після заголовка сторінки вгорі> top.container

До головних стовпців> столбцы.top

Перед | Сторінка сторінки | page.bottom

Перед контейнером нижнього колонтитулу сторінки> page.bottom.container

Посилання CMS Footer> cms_footer_links_container

Порівняйте обертку для посилань> упаковка порівняння-посилання

Основна область вмісту> вміст

Основний вміст убік> content.aside

Основний зміст знизу> content.bottom

Основний контейнер вмісту> головний

Основний вміст вгорі> content.top

Блок просування міні-кошиків> minicart.addons

Сторінка знизу> перед.body.end

Футер сторінки> нижній колонтитул

Контейнер нижнього колонтитулу сторінки> колонтитул-контейнер

Заголовок сторінки> загортач заголовка

Контейнер заголовка сторінки> header.container

Панель заголовка сторінки> header.panel

Вгору сторінки> after.body.start

Бічна панель Додаткова> бічна панель.додатково

Основна бічна панель> бічна панель. Головна


3

Я зібрав невеликий модуль, який запише структуру сторінки XML у файл журналу в var/log/папці.

додаток / код / ​​CustomerParadigm / PageXml / тощо / 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>

додаток / код / ​​CustomerParadigm / PageXml / тощо / 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>

додаток / код / ​​CustomerParadigm / PageXml / registration.php

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

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

Тут нічого надто дивного не відбувається, і я впевнений, що є багато можливостей для вдосконалення (робота з вбудованим реєстратором - це одна з них), але це робить роботу для мене, коли я розробляю сайт.


0

https://gist.github.com/joshfortyfour/11d0f7dbc7be9e85bf4e9c62c668f465

@де ти знайдеш список контейнерів, все ще важко знайти потрібний, але я знаю, що ти можеш знайти потрібний.

або як вище, дехто надає безкоштовне посилання на модуль, щоб знайти контейнер або блок в магенто, я спробував це, але все-таки це те, наскільки корисно реагувати на блукання по Інтернету.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.