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





controller group (6)


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 если у него есть блоки, модели и помощники.

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

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

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

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

type="A/B"

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




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

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

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

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




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

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

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




я не знаю о типах «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() .




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

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

подробнее:

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

сначала увидеть структуру папок

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

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

app> local> namespace> modulename> Block > 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>

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




Если другие решения не сработают для вас, попробуйте следующее:

Шаг 1: (если ваша установка находится в webroot)

замещать

    #RewriteBase /magento/

с

    RewriteBase /

Шаг 2:

Добавьте следующие строки (включительно исключайте admin, потому что backend требует index.php внутри)

RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ http://www.yourdomain.com/$1 [R=301,L]
RewriteRule ^index.php/(admin|user)($|/) - [L]
RewriteRule ^index.php/(.*) $1 [R=301,QSA,L]

сразу после

RewriteRule .* index.php [L] 

Это работает для меня

Если он все еще не работает, дважды проверьте конфигурацию Magento: System-> Configuration-> Web-> Search Engine Optimization. Необходимо перезапустить перезаписи.







magento block