Статьи

Пользовательские макеты и шаблоны с Magento

В первой части этой серии мы изучили основы разработки модулей Magento, включая структуру каталогов Magento, структуру пользовательских модулей, и создали базовый модуль «Hello World», чтобы понять, как работают контроллеры в Magento.

В этой статье мы узнаем, как создавать файлы блоков и макетов. В частности, мы рассмотрим, как работают файлы макетов и файлы блоков в Magento, и рассмотрим рендеринг файлов макетов.

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

Вы также можете получить персональную помощь, наняв одного из поставщиков услуг Magento в Envato Studio.

Поставщики услуг Magento на Envato Studio

Но, с учебником! Сначала мы увидим, что такое файлы макетов и блоков и как они полезны при рендеринге интерфейсных страниц в Magento, а затем мы увидим, как мы можем включить их в наш пользовательский модуль.

Как следует из названия, файлы макетов полезны при рендеринге первых страниц Magento. Файлы макета — это файлы XML, которые находятся в приложении> дизайн> интерфейс> ваш интерфейс> тема> макет . Здесь вы можете видеть, что существует много файлов макетов для любого данного модуля. Каждый модуль Magento имеет свои собственные файлы макетов, так же как и модуль customer.xml с customer.xml   файл макета, модуль каталога имеет catalog.xml   файл макета и т. д. Эти файлы макета содержат структурные блоки и блоки содержимого .

Если вам интересно, зачем Magento нужны эти блоки, вы можете узнать больше об этом в первой части серии.

Давайте углубимся в файлы макетов, рассмотрев один пример. Зайдите в приложение> дизайн> интерфейс> база> макет   и откройте customer.xml   файл. Здесь все блоки обернуты вокруг основного <layout>   тег. Вы можете увидеть другой <tag> который содержит определенные блоки.

Смотрите ниже фрагмент:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<!—
New customer registration
—>
 
    <customer_account_create translate=»label»>
        <label>Customer Account Registration Form</label>
        <!— Mage_Customer —>
        <remove name=»right»/>
        <remove name=»left»/>
 
        <reference name=»root»>
            <action method=»setTemplate»><template>page/1column.phtml</template></action>
        </reference>
        <reference name=»content»>
            <block type=»customer/form_register» name=»customer_form_register» template=»customer/form/register.phtml»>
                <block type=»page/html_wrapper» name=»customer.form.register.fields.before» as=»form_fields_before» translate=»label»>
                    <label>Form Fields Before</label>
                </block>
            </block>
        </reference>
    </customer_account_create>

Дескрипторы — это основная сущность, с помощью которой Magento определяет, какой блок загружать при вызове определенного модуля. <customer_account_create>   специфичный для модуля дескриптор Этот дескриптор срабатывает, когда кто-то открывает страницу регистрации клиента.

Каждый обрабатывает вложенный в контент блок, специфичный для данной страницы. Некоторые файлы макетов содержат <default>   ручка. На этом этапе вы можете спросить о разнице между специфическими дескрипторами модуля и дескрипторами по умолчанию. Короче говоря, специфичные для модуля дескрипторы отображают блоки внутри него только тогда, когда этот модуль отображается в браузере, тогда как дескриптор по умолчанию загружается на большую часть страницы.

Внутри дескриптора находятся различные блоки, которые определяют файл шаблона, который будет отображаться при вызове этого блока. Блоки бывают двух типов:

  1. Структурные блоки
  2. Блоки контента

В нашем файле макета мы определяем только блоки контента   и затем мы обертываем их в S блоков Trustrur . Например, если кто-то вызывает страницу регистрации клиента, и мы хотим загрузить ее слева, справа, в контент или нижний колонтитул, мы заключаем этот блок в соответствующий блок структурирования. Здесь мы обернули два блока внутри блока «content», который является блоком структурирования.

Блоки содержат атрибуты, подобные следующим:

  1. Тип определяет классы блоков, в которых мы можем определить различные функции
  2. имя определяет   уникальное имя конкретного блока, чтобы другие блоки могли ссылаться на существующий блок по имени и расширять его
  3. До / после — это атрибуты, которые мы можем установить, которые позволяют нам определять положение нашего блока внутри блока структурирования.
  4. Шаблон определяет фактическое phtml файла phtml и путь, по которому идет наш код HTML и PHP.
  5. Действие позволяет нам запускать любое действие, такое как загрузка JavaScript и все, используя этот атрибут.
  6. атрибут as в основном используется для структурных блоков

Тег <reference> используется для расширения уже существующих блоков. В этом случае мы расширили блок контента и вставили в него наш собственный блок. Вы должны использовать правильное имя блока, которое хотите расширить.

Тег <remove> используется для удаления определенного блока. Например, скажем, что на странице регистрации вашей учетной записи вы не хотите отображать правый и левый столбцы. В этом случае вы можете просто удалить этот блок с помощью следующего синтаксиса <remove name="your block name">.

Когда вы заключаете один блок в другой, этот блок называется дочерним блоком. Всякий раз, когда наш родительский блок вызывается нашим модулем, дочерний блок вызывается автоматически.

1
2
3
<block type=’core/template’ name=’parent’ template=’parent.phtml’>
<block type=’core/template’ name=’child’ template=’child.phtml’/>
</block>

Вы также можете вызывать дочерний блок отдельно с помощью синтаксиса ниже в вашем файле шаблона
echo $this->getChildHtml('child');

Откройте page.xml   файл макета, вы найдете <root>   блок, который выглядит как ниже

1
<block type=»page/html» name=»root» output=»toHtml» template=»page/3columns.phtml»>

Magento начинает рендеринг из корневого блока. Все остальные блоки являются дочерними блоками корневого блока. Корневой блок определяет структуру страницы. Здесь вы можете видеть, что в настоящее время он установлен на 3columns.phtml , вы можете изменить его на 1column.phtml , 2columns-right.phtml или 2columns-left.phtml.

Для любой конкретной страницы вы можете добавить файлы CSS и JavaScript в тег макета следующим образом:

1
2
3
4
5
6
<customer_account_create>
 <reference name=’head’>
  <action method=»addCss»><stylesheet>css/styles.css</stylesheet></action>
  <action method=»addJs»><script>varien/js.js</script></action>
 </reference>
</customer_account_create>

Здесь вы можете видеть, что мы добавили файл CSS и файл JavaScript внутри head нашей страницы учетной записи клиента.

Классы блоков используются для определения функций, специфичных для конкретного блока. Файл классов блоков находится в app> code> local / community / core> в пространстве имен вашего модуля> в имени вашего модуля> Block   каталог. Этот файл содержит функции, которые мы можем использовать непосредственно с $this   ключевое слово в блочном файле шаблона. Давайте рассмотрим один пример, чтобы понять классы блоков.

Перейдите к файлу review.xml который находится в папке app> design> frontend> base> default> layout и найдите следующую строку кода:

01
02
03
04
05
06
07
08
09
10
11
12
<!—
Customer account home dashboard layout
—>
 
    <customer_account_index>
 
        <!— Mage_Review —>
        <reference name=»customer_account_dashboard»>
            <block type=»review/customer_recent» name=»customer_account_dashboard_info1″ as=»info1″ template=»review/customer/recent.phtml»/>
        </reference>
 
</customer_account_index>

Здесь вы можете увидеть review/customer_recent блока review/customer_recent   которые ссылаются на шаблон recent.phtml . Перейдите в приложение> дизайн> внешний интерфейс> база> по умолчанию> шаблон> обзор> клиент   и откройте recent.phtml .

В этом файле вы можете увидеть две функции, вызываемые с помощью ключевого слова $this . Это $this->getCollection() и $this->count() . Эти функции определены в файле классов их recent.php файлов recent.php   который находится в app> code> core> Mage> review> Block> customer   каталог.

Здесь type = "review/customer_recent" блока type = "review/customer_recent" относится к Mage_Review_Block_Customer_Recent блоков Mage_Review_Block_Customer_Recent который определен в файле recent.php . Какие бы функции вы ни определяли в этом классе, вы можете напрямую использовать его в соответствующем файле шаблона с помощью $this .

Наконец, мы получили специальный модуль «Hello World» с контроллером. Здесь мы создаем файл макета нашего пользовательского модуля. Итак, давайте создадим его.

Чтобы создать файл макета, нам нужно сначала создать файл класса блока. Прежде чем добавить файл класса, нам нужно сообщить нашему модулю, что мы включаем файлы блоков. Перейдите в приложение> code> local> Chiragdodia> Mymodule> и т. Д.> config.xml   и добавьте следующую строку кода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<frontend>
<layout>
        <updates>
            <mymodule>
                <file>mymodule.xml</file> <!— Our layout file name—>
            </mymodule>
        </updates>
</layout>
</frontend>
<global>
        <blocks>
            <mymodule>
                <class>Chiragdodia_Mymodule_Block</class>
            </mymodule>
        </blocks>
</global>

Конечный файл XML содержит следующие строки кода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version=»1.0″?>
<config>
    <modules>
        <Chiragdodia_Mymodule>
            <version>0.1.0</version> <!— Version of module —>
        </Chiragdodia_Mymodule>
    </modules>
    <frontend>
        <routers>
            <mymodule>
                <use>standard</use>
                <args>
                    <module>Chiragdodia_Mymodule</module>
                    <frontName>mymodule</frontName>
                </args>
            </mymodule>
        </routers>
         <layout>
            <updates>
                <mymodule>
                    <file>mymodule.xml</file> <!— Our layout file name—>
                </mymodule>
            </updates>
         </layout>
    </frontend>
    <global>
        <blocks>
            <mymodule>
                <class>Chiragdodia_Mymodule_Block</class>
            </mymodule>
        </blocks>
    </global>
</config>

Далее, перейдите в приложение> код> локальный> Chiragdodia> Mymodule> Блок   и создайте файл Mymodule.php   который содержит ниже строки кода

1
2
3
4
5
6
7
8
<?php
class Chiragdodia_Mymodule_Block_Mymodule extends Mage_Core_Block_Template
{
    public function myfunction()
    {
        return «Hello tuts+ world»;
    }
}

Здесь мы объявили класс Chiragdodia_Mymodule_Block_Mymodule который содержит функцию myfunction которую мы можем вызвать непосредственно из нашего файла шаблона макета.

Перейдите в приложение> дизайн> внешний интерфейс> по умолчанию> по умолчанию> макет и создайте файл mymodule.xml который содержит строки кода ниже

1
2
3
4
5
6
7
8
<?xml version=»1.0″?>
<layout version=»0.1.0″>
    <mymodule_index_index>
        <reference name=»content»>
            <block type=»mymodule/mymodule» name=»mymodule» template=»mymodule/mymodule.phtml» />
        </reference>
    </mymodule_index_index>
</layout>

Перейдите в приложение> дизайн> внешний интерфейс> по умолчанию> по умолчанию> шаблон   и создайте файл mymodule.phtml . В этом файле мы будем вызывать функцию myfunction которую мы объявили в нашем классе блоков.

1
2
3
<?php
    echo $this->myfunction();
?>

Если до сих пор все правильно, вы увидите вывод с тремя колонками, перейдя по URL yoursite.com/index.php/mymodule/index.

В некоторых версиях Magento темы по умолчанию не содержат макетов и шаблонов каталогов. В этом случае вы можете создать свой макет и файл шаблона в app> design> frontend> base   каталог.

Так работают макеты в Magento. В предыдущей статье мы создали простой модуль «Hello World», в этой статье мы создали его с помощью файла макета. Структура макета Magento поначалу немного сложна для понимания, но как только вы начнете с ней работать, вы легко поймете, что стоит за ней.

В этом посте я приложил демонстрационные файлы модуля, которые мы создали до сих пор. Не стесняйтесь комментировать и задавать любые вопросы, которые могут у вас возникнуть по этой конкретной проблеме.