Статьи

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

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

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

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

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

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

Вот список файлов, необходимых для желаемой настройки:

  • app/etc/modules/Envato_All.xml : это файл, используемый для включения нашего пользовательского модуля.
  • app/code/local/Envato/Catalog/etc/config.xml : это файл конфигурации модуля, в котором мы настроим переопределение класса модели, используя определенные теги в соответствии с соглашениями Magento.
  • app/code/local/Envato/Catalog/Model/Category.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>
    <models>
      <catalog>
        <rewrite>
          <category>Envato_Catalog_Model_Category</category>
        </rewrite>
      </catalog>
    </models>
  </global>
</config>

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

Далее, <category> используется для определения идентификатора модели, который будет переопределен классом Envato_Catalog_Model_Category . Он сопоставлен с файлом модели «Category.php» в каталоге «Model» модуля Catalog. Здесь важно отметить, что мы следуем структуре каталогов, аналогичной модулю ядра. Хотя это не является строго необходимым, это лучше, чем использование другой структуры каталогов, потому что это помогает поддерживать читабельность.

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<?php
/**
 * Catalog category model
 *
 * @category Envato
 * @package Envato_Catalog
 */
class Envato_Catalog_Model_Category extends Mage_Catalog_Model_Category
{
  public function getProductCollection()
  {
    // Include your custom code here!
 
    $collection = Mage::getResourceModel(‘catalog/product_collection’)
      ->setStoreId($this->getStoreId())
      ->addCategoryFilter($this);
 
    return $collection;
  }
}

Мы определили класс Envato_Catalog_Model_Category который расширяет базовый Mage_Catalog_Model_Category модели Mage_Catalog_Model_Category модуля «Каталог». Таким образом, вы можете переопределить каждый метод базового класса и создать новые методы, если это необходимо.

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

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

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

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