Tìm hiểu tên của tên Viking để tham khảoBlock trong Magento 2


11

Tôi muốn xóa một số khối khỏi trang của tôi. Nói ví dụ rằng tôi muốn loại bỏ container cho logo.

Sau đó, tôi tạo /app/design/frontend/MYVENDORNAME/MYTHEMENAME/Magento_Theme/layout/default.xmlvới mã sau đây:

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

Trong trường hợp này, tôi đã tìm ra tên (name = "logo") của khối tham chiếu này bằng cách tìm kiếm thông qua các tệp trong Chủ đề cơ sở.

Câu hỏi là: Có cách nào tốt hơn để tìm ra tên của các khối. Tôi nghĩ phải có một danh sách tất cả các tên được sử dụng trong các tệp XMl trong Magento? Hoặc một số loại tài liệu tham khảo?

Nói ví dụ rằng tôi muốn xóa menu ( <div class="sections nav-sections">...</div>). Làm thế nào để tôi tìm ra tên của nó


1
bạn có thể tìm thấy nó trong tệp XML trong chủ đề cơ sở. nếu bạn muốn loại bỏ menu tên này là catalog.topnav. tôi tìm thấy nó trong default.xml trong mô-đun Theme trong cơ sở.
xanka

Câu trả lời:


17

Có một vài cách để làm điều này:

  1. Phỏng đoán
  2. Xem lại Bố cục cho Chủ đề Cơ sở, Trống và Luma
  3. Thực hiện tìm kiếm IDE cho tên lớp và ID
  4. Bật 'Gợi ý đường dẫn mẫu đã bật cho cửa hàng' và 'Thêm tên khối vào gợi ý'.

Bạn có thể bật gợi ý đường dẫn và chặn gợi ý bằng cách đăng nhập vào giao diện quản trị và truy cập:

Stores > Configuration > Advanced > Developer > Debug

Thật không may, vẫn không có cách nào chắc chắn để tìm thấy những thứ này một cách dễ dàng, theo như tôi biết. Mặc dù có vẻ như những kẻ làm việc cốt lõi đang ở trên đó:

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


Như Gareth đã nói, bạn có thể kích hoạt các gợi ý đường dẫn mẫu để cố gắng tìm ra mẫu wich và khối đang hiển thị phần đó của mã.
Barbanet

3
Tôi thích cách bạn nói 'đoán', gợi ý đường dẫn khá vô dụng trong một số trường hợp.
wlin

Số 4 không hoạt động với tôi trong trường hợp đầu tiên, vì tôi đã không đưa danh sách IP của mình như được mô tả ở đây: docs.magento.com/m2/ee/user_guide/system/ Kẻ
hey

15

Đây là cách tôi tìm thấy chúng ...

Nội dung > Tiện ích > Thêm
Loại tiện ích =
Chủ đề thiết kế khối tĩnh CMS = [Chủ đề của bạn]

Tiếp tục

Cập nhật bố cục > Thêm
hiển thị bố cục Bật = [Chọn một]

Nhấp chuột phải Kiểm tra "Vui lòng chọn" bên dưới Container.
Mở rộng <select>phần tử trong Dev Tools
Tất cả các tùy chọn value = 'là tên ReferenceContainer của bạn.

:)


Tại sao chúng ta không thấy ReferenceContainers như header.panel hoặc page.wrapper trong danh sách này?
DevonDahon

1
Cảm ơn rât nhiều! Bạn nghĩ rằng magento 2 dev sẽ cung cấp một tài liệu tham khảo nhanh để tìm những tên này trong tài liệu của họ. Rất cảm kích vì lời khuyên hữu ích của bạn :)
Jonathan Marzullo

Bạn cần chọn "Bố cục trang" trong trình đơn "Hiển thị bật", sau đó bạn sẽ thấy tất cả các thùng chứa tham chiếu
Samyer

Cảm ơn bạn! Điều này làm việc một điều trị cho tôi - rõ ràng bây giờ!
Freshwebs

7

Bạn có thể thực thi mã php-cli bên dưới để có danh sách tất cả ~ 200 referenceBlock. Đảm bảo đường dẫn đến thư mục gốc Magento 2 của bạn là chính xác. Bạn cũng có thể thay đổi instructionbiến thành danh sách block, containerreferenceContainer.

<?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
Thiên tài. Phương pháp này là vô giá. Cảm ơn bạn rất nhiều vì đã chia sẻ.
crashtestxxx

1
Điều này thật tuyệt vời cảm ơn rất nhiều siêu hữu ích. Tôi đã sửa đổi nó thành một tệp có thể loại bỏ tất cả chúng thành tệp văn bản cho toàn bộ trang web. gist.github.com/LiamKarlMitchell/ từ
Liam Mitchell

Nó có yêu cầu một số phiên bản cụ thể của php / magento không? Trên PHP 7.2.24 + Magento 2.3.3 Tôi gặp lỗi: "Cảnh báo PHP: ksort () dự kiến ​​tham số 1 sẽ là mảng, null được đưa ra trong /home/magento/Desktop/list-magento.php trên dòng 21" và đã nhận không có đầu ra.
Adrian Lopez

4

Bạn có thể sử dụng tiện ích mở rộng miễn phí này:

https://github.com/ho-nl/magento2-Ho_Templateh gợi ý

Hoặc theo dõi @blizam trả lời một số tài liệu tham khảo được chọn từ các tiện ích:

Sau tiêu đề trang> page.top

Sau trang Tiêu đề hàng đầu> top.container

Trước Cột chính> Cột.top

Trước trang Footer> page.bottom

Trước trang Footer Container> page.bottom.container

Liên kết chân trang CMS> cms_footer_links_container

So sánh Link Wrapper> so sánh-link-Wrapper

Khu vực nội dung chính> nội dung

Nội dung chính Bên cạnh> content.aside

Nội dung chính Dưới cùng> content.bottom

Container nội dung chính> chính

Nội dung chính Top> content.top

Khối khuyến mãi mini-cart> minicart.addons

Trang dưới> trước.body.end

Trang chân trang> chân trang

Trang Footer Container> footer-container

Tiêu đề trang> trình bao bọc tiêu đề

Trang chứa tiêu đề> tiêu đề.container

Bảng tiêu đề trang> header.panel

Trang đầu> sau.body.start

Thanh bên bổ sung> sidebar.additable

Thanh bên Chính> sidebar.main


3

Tôi kết hợp một mô-đun nhỏ sẽ ghi cấu trúc trang XML vào một tệp nhật ký trong var/log/ thư mục.

ứng dụng / mã / 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>

ứng dụng / mã / CustomerParadigm / PageXml / etc / event.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>

ứng dụng / mã / CustomerParadigm / PageXml / đăng ký.php

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

ứng dụng / mã / 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;
    }
}

Không có gì quá tuyệt vời đang diễn ra ở đây và tôi chắc chắn có rất nhiều chỗ để cải thiện (làm việc với logger tích hợp là một trong số đó) nhưng nó hoàn thành công việc cho tôi khi tôi đang phát triển một trang web.


0

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

@ ở đây bạn tìm thấy một danh sách các container vẫn khó xác định đúng vị trí nhưng tôi biết bạn có thể quản lý để tìm đúng.

hoặc như trên, một số cung cấp một liên kết mô-đun miễn phí để tìm container hoặc chặn trong magento, tôi đã thử nó nhưng vẫn hữu ích khi đi lang thang trên web.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.