Статьи

Понимание переопределения в Magento: блоки

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

В Magento есть разные способы, позволяющие переопределить основные файлы. Одним из них является реализация шаблона Event Observer. Используя этот метод, вы определите в своем модуле наблюдателей для желаемых событий, и они будут выбраны, когда связанные события будут вызваны в Magento. Это, безусловно, мощный и стандартный способ добавить ваши изменения в основные модули Magento. Сказав это, есть ситуации, в которых вы почувствуете, что было бы здорово, если бы вы могли просто заменить фрагменты основного файла вашими. Вы можете сделать это, используя файл конфигурации XML в вашем пользовательском модуле.

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

В этом руководстве мы создадим пользовательский модуль, чтобы понять, как работает переопределение блоков в Magento. В пользовательском модуле мы переопределим блок списка товаров, отображаемый в представлении страницы категории. Переопределение работает путем установки определенных тегов XML в соответствии с соглашениями Magento.

Я предполагаю, что вы знакомы с базовым процессом создания модулей в Magento. Вот хорошая статья, объясняющая основы создания пользовательских модулей, на тот случай, если вы захотите взглянуть на это! Давайте сразу же перейдем к содержанию этого урока!

Мы создадим простой пользовательский модуль с именем «Каталог», который устанавливает переопределение основного списка товаров (app / code / core / Mage / Catalog / Block / Category / View.php) в представлении страницы категории. Вот список файлов, необходимых для желаемой настройки:

  • app / etc / modules / Envato_All.xml: это файл, используемый для включения нашего пользовательского модуля.
  • app / code / local / Envato / Catalog / etc / config.xml: это файл конфигурации модуля, в котором мы настроим переопределение блоков, используя определенные теги в соответствии с соглашениями Magento.
  • app / code / local / Envato / Catalog / Block / Category / View.php: Это наш новый файл блока, который заменит файл основного блока.

Во-первых, нам нужно создать файл включения модуля. Создайте файл «app / etc / modules / Envato_All.xml» и вставьте следующее содержимое в этот файл. Мы использовали Envato качестве пространства имен модуля и Catalog качестве имени модуля. Он по умолчанию включит наш модуль Каталога.

1
2
3
4
5
6
7
8
9
<?xml version=»1.0″?>
<config>
  <modules>
    <Envato_Catalog>
      <active>true</active>
      <codePool>local</codePool>
    </Envato_Catalog>
  </modules>
</config>

Далее нам нужно создать файл конфигурации модуля. Создайте «app / code / local / Envato / Catalog / etc / config.xml» и вставьте следующее содержимое в этот файл.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<?xml version=»1.0″?>
<config>
  <modules>
    <Envato_Catalog>
      <version>1.0</version>
    </Envato_Catalog>
  </modules>
 
  <global>
    <blocks>
      <catalog>
        <rewrite>
          <category_view>Envato_Catalog_Block_Category_View</category_view>
        </rewrite>
      </catalog>
    </blocks>
  </global>
</config>

В начале модуля мы установили номер версии модуля с помощью <version> . После этого теги <catalog> и <rewrite> используются для информирования системы переопределения Magento о том, что мы собираемся переопределить один из «блоков» основного модуля «Catalog».

Кроме того, <category_view> используется для определения идентификатора блока, который будет переопределен классом Envato_Catalog_Block_Category_View . Он сопоставлен с файлом блока «Category / View.php» в каталоге «Block» модуля Catalog. Здесь важно отметить, что мы следуем структуре каталогов, аналогичной модулю ядра. Хотя в этом нет особой необходимости, для сохранения читаемости предпочтительнее другая структура каталогов.

Наконец, единственное, что осталось, это определить класс блока Envato_Catalog_Block_Category_View . Давайте создадим файл блока «app / code / local / Envato / Catalog / Block / Category / View.php» и заполните его следующим содержимым.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<?php
/**
 * Category View block
 *
 * @category Envato
 * @package Envato_Catalog
 */
class Envato_Catalog_Block_Category_View extends Mage_Catalog_Block_Category_View
{
  public function getProductListHtml()
  {
    // Include your custom code here!
    return $this>getChildHtml(‘product_list’);
  }
}

Мы определили класс Envato_Catalog_Block_Category_View который расширяет базовый Mage_Catalog_Block_Category_View блока Mage_Catalog_Block_Category_View . Таким образом, вы можете переопределить каждый метод базового класса и создать новые методы, если это необходимо.

В приведенном выше примере метод getProductListHtml переопределяется, поэтому он будет вызываться при просмотре страницы категории! Вы можете изменить код в соответствии с вашими требованиями.

Хотя это очень простой пример, он служит для переопределения основного блока, и вы можете настроить его, чтобы сделать вещи более сложными и создать что-то более полезное!

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