Розуміння блоку і типу блоку Magento


105

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

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

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

Будь ласка, поясніть

type="A/B"

Дайте мені знати, звідки беруться ці А і В?

Відповіді:


126

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. Те ж саме відбувається і з ресурсними моделями та помічниками. Ваш власний модуль повинен буде визначити їх у своєму конфігурації, якщо він повинен мати блоки, моделі та помічники.


@ clockworkgeek дуже дякую Ваша відповідь мені дуже допомагає.
Anup_Tripathi

Ти врятував мені тонну. Дякую.
Суміт Малик

Приємне пояснення
Jalpesh Patel

Що робити, якщо це переписаний / перезаписаний блок, як я можу тоді визначити та використовувати тип блоку?
Вікі Дев

@VickyDev вам не потрібно робити нічого іншого, оскільки новий блок буде нащадком старого блоку і так сумісний. Можна і потрібно робити вигляд, що він навіть не існує.
годинниковий годинник

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

сторінка - це 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", чи не повинно це бути привіт в кінці імені?
Рай Ехтішам

5

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

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

Ні, ти не помилився. Але це "<!-- script -->"може заплутати. Давайте уточнимо: як зазначено вище у відповідях, це псевдонім, який складався з двох частин, перша частина ("А") сама псевдонім, яку ви визначаєте для класів вашого модуля в модулі 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>

нб: сподіваюся, я не помиляюся ..

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