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>

इस मामले में मैं बेस थीम में फाइलों के माध्यम से खोज कर इस संदर्भ ब्लॉक का नाम (नाम = "लोगो") पता लगाने में कामयाब रहा।

सवाल यह है कि क्या ब्लॉकों के नामों का पता लगाने का एक बेहतर तरीका है। मुझे लगता है कि Magento में एक्सएमएल फाइलों में इस्तेमाल होने वाले सभी नामों की एक सूची होनी चाहिए? या किसी तरह का संदर्भ?

उदाहरण के लिए कहें कि मैं मेनू ( <div class="sections nav-sections">...</div>) को हटाना चाहूंगा । मुझे उस का नाम कैसे पता चलेगा


1
आप इसे बेस थीम में XML फाइल में पा सकते हैं। यदि आप मेनू को निकालना चाहते हैं तो यह नाम है catalog.topnav। मैं इसे default.xml में बेस में मॉड्यूल थीम में ढूंढता हूं।
xanka

जवाबों:


17

ऐसा करने के कुछ तरीके हैं:

  1. अनुमान
  2. बेस, ब्लैंक और लूमा थीम के लिए समीक्षा लेआउट
  3. कक्षा और आईडी नामों के लिए आईडीई खोजें करें
  4. 'स्टोरफ्रंट के लिए सक्षम टेम्पलेट पथ संकेत' और 'संकेत में ब्लॉक नाम जोड़ें' सक्षम करें।

आप व्यवस्थापक इंटरफ़ेस में प्रवेश करके और जाने के लिए पथ संकेत और ब्लॉक संकेत को सक्षम कर सकते हैं:

Stores > Configuration > Advanced > Developer > Debug

दुर्भाग्य से, अभी तक इन आसानी से खोजने के लिए कोई निश्चित तरीका नहीं है, जहां तक ​​मुझे पता है। हालांकि ऐसा लगता है कि कोर पर काम करने वाले लोग इस पर हैं:

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


जैसा कि गैरेथ ने कहा, आप विच टेम्पलेट को जानने की कोशिश करने के लिए टेम्प्लेट पाथ संकेत को सक्षम कर सकते हैं और कोड के उस हिस्से को ब्लॉक कर रहे हैं।
बारबनेट

3
मुझे पसंद है कि आपने 'अनुमान' कैसे कहा, कुछ मामलों में पथ संकेत बहुत बेकार है।
wlin

# 4 ने पहली बार में मेरे लिए काम नहीं किया, क्योंकि मैंने यहां वर्णित के रूप में अपने आईपी को श्वेतसूची में नहीं किया: docs.magento.com/m2/ee/user_guide/system/…
hey

16

यहाँ मैं उन्हें कैसे मिल रहा है ...

सामग्री > विजेट > विजेट
प्रकार जोड़ें = सीएमएस स्टेटिक ब्लॉक
डिज़ाइन थीम = [आपका थीम]

जारी रखें

लेआउट अपडेट > लेआउट लेआउट जोड़ें
= [एक चुनें]

राइट क्लिक करें निरीक्षण पर कंटेनर के नीचे "कृपया का चयन करें"। देव टूल्स में तत्व का
विस्तार करें सभी विकल्प मूल्य = आपके संदर्भ हैं।<select>

:)


हम इस सूची में शीर्ष लेख, शीर्षक या पेज.वॉपर जैसे संदर्भकंटेनर्स क्यों नहीं देखते हैं?
DevonDahon

1
आपका बहुत बहुत धन्यवाद! आपको लगता है कि Magento 2 देवता अपने डॉक्स में इन नामों को खोजने के लिए एक त्वरित संदर्भ प्रदान करेंगे। आपकी मददगार टिप के लिए बहुत सराहना की गई :)
जोनाथन मारजुल्लो

आपको "प्रदर्शन पर" ड्रॉप डाउन में "पेज लेआउट" का चयन करने की आवश्यकता है, फिर आप सभी संदर्भ कंटेनर देखेंगे
समीर

धन्यवाद! यह मेरे लिए एक इलाज का काम करता है - जाहिर है!
फ्रेशवेब

धन्यवाद आदमी, बहुत अच्छी युक्तियां जब एम 2 सीखते हैं :)
9

7

आप सभी ~ 200 की सूची प्राप्त करने के लिए नीचे php-cli कोड निष्पादित कर सकते हैं 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 से सरणी होने की उम्मीद करता है, null /home/magento/Desktop/list-magento.php में 21 नंबर पर दिया गया है" और मिला उत्पादन नही।
एड्रियन लोपेज 13

4

आप इस मुफ्त एक्सटेंशन का उपयोग कर सकते हैं:

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

या निम्नलिखित @blizam विगेट्स से उठाए गए कुछ संदर्भों का उत्तर दें:

पेज हैडर के बाद> page.top

Page Header Top> top.container के बाद

मुख्य कॉलम से पहले> स्तंभकार

पृष्ठ पाद> पृष्ठ से पहले

पेज पाद कंटेनर से पहले> page.bottom.container

सीएमएस पाद लिंक> cms_footer_links_container

Link Wrapper> तुलना-लिंक-आवरण की तुलना करें

मुख्य सामग्री क्षेत्र> सामग्री

मुख्य सामग्री असाइड> content.aside

मुख्य सामग्री नीचे> content.bottom

मुख्य सामग्री कंटेनर> मुख्य

मुख्य सामग्री शीर्ष> content.top

मिनी-कार्ट प्रमोशन ब्लॉक> minicart.addons

पृष्ठ निचला> इससे पहले .body.end

पृष्ठ पाद> पाद

पेज पाद कंटेनर> पाद-कंटेनर

पृष्ठ शीर्ष लेख> शीर्ष लेख-आवरण

पृष्ठ शीर्ष लेख कंटेनर> शीर्ष लेख

पृष्ठ शीर्ष लेख पैनल> शीर्ष लेख। पैनल

पृष्ठ शीर्ष> after.body.start

साइडबार अतिरिक्त> साइडबार

साइडबार मेन> साइडबार मेन


3

मैंने एक छोटे मॉड्यूल को एक साथ रखा है जो var/log/फ़ोल्डर में लॉग फ़ाइल में XML पेज संरचना लिखेगा ।

एप्लिकेशन / कोड / 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>

एप्लिकेशन / कोड / 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>

एप्लिकेशन / कोड / CustomerParadigm / PageXml / registration.php

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

एप्लिकेशन / कोड / CustomerParadigm / PageXml / मॉडल / 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.