Понимание Magento Блок и Тип блока - PullRequest
105 голосов
/ 09 июля 2011

Я просто хочу понять значение

 <block type="page/html" name="root" output="toHtml" template="example/view.phtml">

Я получил много ссылок от Google и многое понял по этому поводу, но я все еще не могу понять формирование type="page/html" как сформировать типдля моего пользовательского модуля.

Пожалуйста, объясните

type="A/B"

Дайте мне знать, откуда взялись эти А и В?

Ответы [ 5 ]

156 голосов
/ 02 августа 2012

Для получения дополнительной информации о типах блоков magento ниже приведены некоторые встроенные типы блоков, которые широко используются в макете.

  1. <strong>core/template</strong>: в этом блоке отображается шаблон, определенный его атрибутом template. Большинство блоков, определенных в макете, имеют тип или подтип core/template.
  2. <strong>page/html</strong>: это подтип core/template и определяет корневой блок. Все остальные блоки являются дочерними блоками этого блока.
  3. <strong>page/html_head</strong>: определяет заголовок HTML-раздела страницы, который содержит элементы для включения JavaScript, CSS и т. Д.
  4. <strong>page/html_header</strong>: определяет часть заголовка страницы, которая содержит логотип сайта, верхние ссылки и т. Д.
  5. <strong>page/template_links</strong>: Этот блок используется для создания списка ссылок. Ссылки, видимые в области нижнего колонтитула и заголовка, используют этот тип блока.
  6. <strong>core/text_list</strong>: Некоторые блоки, такие как content, left, right и т. Д., Имеют тип core/text_list. Когда эти блоки отображаются, все их дочерние блоки отображаются автоматически без необходимости вызывать метод getChildHtml().
  7. <strong>page/html_wrapper</strong>: Этот блок используется для создания блока-обертки, который визуализирует свои дочерние блоки внутри тега HTML, установленного действием setHtmlTagName. По умолчанию используется тег <div>, если элемент не установлен.
  8. <strong>page/html_breadcrumbs</strong>: Этот блок определяет панировочные сухари на странице.
  9. <strong>page/html_footer</strong>: определяет область нижнего колонтитула страницы, которая содержит ссылки нижнего колонтитула, сообщение об авторских правах и т. Д.
  10. <strong>core/messages</strong>: в этом блоке отображаются сообщения об ошибках / успехах / уведомлениях.
  11. <strong>page/switch</strong>: Этот блок можно использовать для переключения языка или магазина.

Это список только часто используемых типов блоков. Существует много других типов блоков, которые используются в расширенных реализациях тем.

126 голосов
/ 09 июля 2011

A - это псевдоним модуля . В этом случае page является сокращением от Mage_Page_Block (оно определено в app/code/core/Mage/Page/etc/config.xml, если вы хотите видеть).

B - это имя класса относительно псевдонима, начальные буквы каждого слова пишутся с большой буквы. В этом случае html становится Html и добавляется к разрешенному псевдониму, поэтому это Mage_Page_Block_Html. Это, вероятно, находится в файле app/code/core/Mage/Page/Block/Html.php, потому что имена классов переводятся непосредственно в местоположения в Magento.

Если бы вы использовали псевдоним модели вместо псевдонима блока, тогда page был бы Mage_Page_Model вместо этого. То же самое происходит с моделями ресурсов и помощниками. Ваш собственный модуль должен будет определить их в config , если он будет иметь блоки, модели и помощники.

8 голосов
/ 01 мая 2015
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">

страница - это FrontendName, определенное в etc/config.xml файл html - это имя класса блока

больше подробностей:

в этой строке type(type="page/html") определяет имя класса блока, связанное с вашимtemplate(template="example/view.phtml">) и имя является уникальным для каждого блока.

сначала посмотрите структуру папок

app> local> space> name> имя модуля> и т. Д.> Config.xml

мы устанавливаем FrontendName = 'mymodule'

app> local> namespace> modulename> Block > hello.php

в hello.php youсоздали функцию

   class namespace_modulename_Block_Data extends Mage_Core_Block_Template
   {
    public function mydata()
        {
            $data = "Block is called";
            return $data;
         }     
}   

и теперь перейдите на страницу XML вашего макета:

<block type="mymodule/data" name="xyz" template="example/view.phtml"> здесь mydata - это имя внешнего интерфейса

и теперь перейдите к

вашего шаблона

template / example / view.phtml page

здесь вы можете напрямую вызывать функцию mydata ()

как

<div>
<?php echo $this->mydata(); ?>
</div>

теперь выможете получить вывод в браузере "Блок называется"

5 голосов
/ 18 марта 2013

Я не знаю о типе «B», но «A» относится к тегу имени вашего модуля в примере config.xml в config.xml:

<A><!-- script --></A>

Нетты не ошибаешьсяНо "<!-- script -->" может сбивать с толку.Давайте уточним: как указано выше, это псевдоним, который состоит из двух частей, первая часть («A») - это псевдоним, который вы определяете для классов вашего модуля в config.xml вашего модуля, вторая - путьотносительно значения узла.Они вместе («A» + заглавная «B») будут переведены в имя класса, используя первую часть (значение узла «A») точно так, как вы ее определили (следите за прописными / строчными буквами, если вы не хотите часовстрадания), а вторая часть пишется с заглавной буквы после каждого подчеркивания.Итак, начните с примера A / B с блоком и этой конфигурацией:

<config>
  ...
  <global>
    <blocks>
      <A>Vendor_Module_Block</A>
    </blocks>
  </global>
  ...
</config>

Во время выполнения A/B будет разрешено конфигурацией Magento в Vendor_Module_Block_B, которая затем будет включена автозагрузкой из следующегопуть: public/app/local/Vendor/Module/Block/B.php.Чтобы лучше понять, я советую вам взглянуть на Mage_Core_Model_Config::getGroupedClassName(), Mage_Core_Model_Config::getModelInstance() и Varien_Autoload::autoload().

3 голосов
/ 09 июля 2011

Я не знаю о типе "B", но "A" относится к тегу имени вашего модуля в config.xml

Пример в файле config.xml:

<A><!-- script --></A>

nb: надеюсь, я не ошибаюсь ..

...