Понимание блока Magento и типа блока


105

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

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

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

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

type="A/B"

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

Ответы:


126

Это псевдонимA модуля . В данном случае это сокращение от (определяется, если вы хотите видеть).pageMage_Page_Blockapp/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. То же самое происходит и с моделями ресурсов и помощниками. Ваш собственный модуль должен будет определить их в своей конфигурации, если он хочет иметь блоки, модели и помощники.


@ clockworkgeek, большое спасибо. Ваш ответ мне очень помог.
Anup_Tripathi

Ты спас мне тонну. Спасибо.
Сумит Малик

Хорошее объяснение
Jalpesh Patel

Что, если это переписанный / перезаписанный блок, как тогда я могу определить и использовать тип блока?
Vicky Dev

@VickyDev вам не нужно делать ничего другого, так как новый блок будет потомком старого блока и поэтому совместим. Вы можете и должны притвориться, что его даже не существует.
clockworkgeek

158

Чтобы лучше понять типы блоков Magento, ниже приведены некоторые встроенные типы блоков, которые широко используются в макете.

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

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


А как насчет: {{block type = "cms / block" block_id = "terms"}}
daslicht

5
@daslicht Уже упоминалось в ответе, что: Это список только часто используемых типов блоков. Есть много других типов блоков, которые используются в расширенных реализациях тем.
Камеш Джунги

Спасибо. Было действительно полезно.
arqam

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

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

подробнее:

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

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

приложение> локальный> пространство имен> имя модуля> и т. д.> config.xml

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

приложение> локальное> пространство имен> имя модуля> Блок > hello.php

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

   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 - это имя внешнего интерфейса

а теперь перейдите к вашему шаблону

шаблон / пример / view.phtml страница

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

лайк

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

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


Вы назвали блок hello.php, но имя класса блока - «namespace_modulename_Block_Data», разве это не должно быть Hello в конце имени?
Rai Ehtisham

5

Я не знаю о типе «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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.