Это учебный пример переопределений классов в Magento.Как вы, вероятно, знаете, Magento использует форму абстракции для загрузки классов, основанных на содержимом файлов конфигурации XML, разбитых вокруг кодовой базы.Это означает, что мы можем загрузить модель Mage_Checkout_Model_Type_Onepage
, вызвав Mage::getModel('checkout/type_onepage')
с конфигурацией по умолчанию.Довольно интересная функция - это возможность изменить отображение ссылки на модель, checkout/type_onepage
на фактическое имя класса.
Структура каталогов
Итак, вы проделали тяжелую работу: редактированиешаблон и изменение метода модели.Далее вам нужно собрать небольшой модуль для переписывания классов.Основываясь на имени вашего класса, вам понадобится структура каталогов в форме:
/app
/etc
/modules
/Eatyourwords_Checkout.xml
/code
/local
/Eatyourwords
/Checkout
/etc
/config.xml
/Model
/Type
/Onepage.php
Выполнение перезаписи
Перезапись обрабатывается в файле конфигурации вашего модуля, config.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<eyw_c>
<version>1.0</version>
</eyw_c>
</modules>
<global>
<models>
<eyw_c>Eatyourwords_Checkout_Model</eyw_c>
<checkout>
<rewrite>
<type_onepage>Eatyourwords_Checkout_Model_Type_Onepage</type_onepage>
</rewrite>
</checkout>
</models>
</global>
</config>
Материал в группе тегов <modules />
- это просто стандартная начальная загрузка модуля.
В разделе <models />
мы определяем пространство имен , которое будет использоваться при загрузке любого из наших классов Model.Подобно checkout/type_onepage
, мы можем получить доступ к любым моделям, которые у нас есть в каталоге /Model
, добавив eyw_c/*
.
Затем мы откроем пространство имен модели Mage_Checkout
, <checkout />
и выполнимпереписать класс checkout/type_onepage
.Теперь, когда Magento пытается загрузить checkout/type_onepage
, он будет искать наш класс.Все остальные классы checkout/*
не будут затронуты.Имя класса для них будет построено обычным способом.
Включите модуль
Далее нам нужно указать Magento на новый модуль, который мы создали.Ваша попытка была почти правильной.Вы должны назвать это Eatyourwords_Checkout.xml
и поместить его в /app/etc/modules
:
<?xml version="1.0"?>
<config>
<modules>
<Eatyourwords_Checkout>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Checkout />
</depends>
</Eatyourwords_Checkout>
</modules>
</config>
.. и все готово.Класс переопределен.