—»     —»   Основы разработки модулей для Magento
  Раздел: eCommerce, Руководства   Нет комментариев  

Основы разработки модулей для Magento



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

Основы разработки модулей для Magento

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

* директории приложений/кода,
* структуру и создание модулей Magento,
* обозреватели событий,
* ведение лог-файла.

Перед тем как начать

Данное руководство требует от вас уже установленной и запущенной программы Magento, либо на локальном компьютере, либо на предполагаемом сервере, на который вы имеете возможность добавлять файлы. Версия Magento, по сути, не имеет значения, так как мы охватим только фундаментальные аспекты, присутствующие во всех версиях и сборках: Community, Professional и Enterprise.

Отключение кэширования

Первый урок, который должен запомнить каждый разработчик Magento: отключайте всё кэширование! Это можно сделать, проследовав в меню Admin Panel > System > Cache Management > Select All > Actions: Disable > Submit.

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

Директория кода и приложений

«Мозги» Magento можно найти в отдельных модулях внутри директории app/code, которая поделена на три области: Core, Community и Local.

Core (Ядро)

Директория app/code/core состоит из всего функционала для продукции, категорий, покупателей, платежей и так далее. До тех пока, пока вы не поймете, что вы делаете (и даже когда поймете), старайтесь не трогать файлы данной категории.

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

Community (Общественная)

Как видно из названия, app/code/community – это директория, где вы можете видеть модули, предоставленные посторонними разработчиками (т.е. не разработчиками из команды Magento). Сотни модулей также доступны вам посредством Magento Connect. В эту папку они попадают после того, как вы устанавливаете их с помощью Package Manager.

Local (Локальная)

Magento поставляется с пустой директорией app/code/local, предназначенной для того, чтобы вы могли самостоятельно добавлять модули в систему. Именно с этой директорией мы будем работать в ходе нашего руководства.

Структурируем нашу директорию

Открывайте ваш любимый редактор и пройдите в папку app/code/local для того, чтобы добавить новые директории и файлы.

Модуль Namespace

Первая директорию, которую мы создадим, будет называться «Namespace». Она может быть названа как вам угодно, но зачастую гораздо удобнее и практичнее называть папку модуля в соответствии с его назначением или с именем автора. Magento использует Mage в качестве имени для самой системы. На сайте Ampersand Commerce используется название Ampersand. В нашем случае мы используем имя «SmashingMagazine». Итак, создаем директорию app/code/local/SmashingMagazine.

Название модуля

Далее мы создадим директорию с описательным названием. Мы создаем модуль, который будет вести лог каждый раз, когда в продукт будут внесены изменения. Если мыслить логически, то нам отлично подойдет название LogProductUpdate. Создайте директорию app/code/local/SmashingMagazine/LogProductUpdate.

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

app
-code
--local
---SmashingMagazine
----LogProductUpdate

Настройка модуля

Далее мы приступаем к настройке нашего модуля. Файл конфигурации располагается внутри нашего модуля в директории под названием «etc». Нам потребуется создать новый XML-файл: app/code/local/SmashingMagazine/LogProductUpdate/etc/config.xml. Данный файл будет информировать Magento о расположении файлов нашего модуля, а также будет сообщать и другие данные типа версии и событий, которые нужно отслеживать. Сейчас нам нужно создать простой файл config.xml, который будет содержать комментарии, объясняющие значения каждого раздела.

<?xml version="1.0" encoding="UTF-8"?>

<!-- The root node for Magento module configuration -->
<config>

<!-- The module's node contains basic information about each Magento module -->
<modules>

<!--
This must exactly match the namespace and module’s folder names,
with directory separators replaced by underscores
-->
<SmashingMagazine_LogProductUpdate>

<!-- This is the version of our module, starting at 0.0.1 -->
<version>0.0.1</version>

</SmashingMagazine_LogProductUpdate>

</modules>

</config>

Активируем наш модуль

Далее мы должны проинформировать систему Magento о присутствии нашего модуля. Это реализуется за счет создания нового XML-файла в app/etc/modules. Название данного файла может быть на ваше усмотрение, так как Magento прочтет все XML-файлы в директории, и будет заинтересован только в их содержимом. Тем не менее, по логике и правилам мы должны использовать одинаковое название модуля и файла. Давайте создадим файл app/etc/modules/SmashingMagazine_LogProductUpdate.xml со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<SmashingMagazine_LogProductUpdate>

<!-- Whether our module is active: true or false -->
<active>true</active>

<!-- Which module code pool to use: core, community or local -->
<codePool>local</codePool>

</SmashingMagazine_LogProductUpdate>
</modules>
</config>

Проверка: активирован ли модуль?

Теперь у нас есть полностью функционирующий модуль, активированный в системе Magento. Он ничего не производит, но является валидным действующим модулем. Это позволяет нам убедиться в том, что до сих пор мы все делали правильно. Если мы авторизуемся в админ-панель Magento и пройдем в меню System > Configuration > Advanced > Advanced и посмотрим список Disable Modules Output, то мы увидим наш модуль SmashingMagazine_LogProductUpdate активным. Если же его нет в списке, то что-то мы сделали не так, поэтому придется проделать все этапы заново с большей аккуратностью. Именно здесь новички-разработчики знакомятся с кэшем в Magento!

Сейчас структура нашего модуля выглядит так:

app
-code
--local
---SmashingMagazine
----LogProductUpdate
-----etc
------config.xml

-etc
--modules
---SmashingMagazine_LogProductUpdate.xml

Определяем обозреватель событий

Обозреватели событий – это очень мощные инструменты, которые предоставляют самый простой и доступный способ расширить функционал Magento без необходимости переписывать какой-либо код или классы. Нам нужно отслеживать события, которые происходят в Magento сразу после сохранения элементов, поэтому необходимый нам код содержится в catalog_product_save_after. Нам нужно понимать модельную структуру Magento, чтобы определить нужный код события при определении нового обозревателя. Только это не входит в нашу сегодняшнюю статью. В другой раз мы обязательно расскажем вам об этом!

Сейчас нам нужно модифицировать наш файл config.xml так, чтобы он включал в себя определение обозревателя событий:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<SmashingMagazine_LogProductUpdate>
<version>0.0.1</version>
</SmashingMagazine_LogProductUpdate>
</modules>

<!-- Configure our module's behavior in the global scope -->
<global>

<!-- Defining an event observer -->
<events>

<!-- The code of the event we want to observe -->
<catalog_product_save_after>

<!-- Defining an observer for this event -->
<observers>

<!--
Unique identifier in the catalog_product_save_after node.
By convention, we put the module's name in lowercase.
-->
<smashingmagazine_logproductupdate>

<!-- The model to be instantiated -->
<class>smashingmagazine_logproductupdate/observer</class>

<!-- The method of the above model to be called -->
<method>logUpdate</method>

<!-- We generally use the singleton type for observers -->
<type>singleton</type>

</smashingmagazine_logproductupdate >

</observers>

</catalog_product_save_after>

</events>

</global>

</config>

Настройка директории модели

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

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<SmashingMagazine_LogProductUpdate>
<version>0.0.1</version>
</SmashingMagazine_LogProductUpdate>
</modules>

<!-- Configure our module's behavior in the global scope -->
<global>

<!-- Defining models -->
<models>

<!--
Unique identifier in the model’s node.
By convention, we put the module’s name in lowercase.
-->
<smashingmagazine_logproductupdate>

<!--
The path to our models directory, with directory
separators replaced by underscores
-->
<class>SmashingMagazine_LogProductUpdate_Model</class>

</smashingmagazine_logproductupdate>

</models>

<events>
<catalog_product_save_after>
<observers>
<smashingmagazine_logproductupdate>
<class>smashingmagazine_logproductupdate/observer</class>
<method>logUpdate</method>
<type>singleton</type>
</smashingmagazine_logproductupdate >
</observers>
</catalog_product_save_after>
</events>

</global>

</config>

Создание модели обозревателя

Сейчас мы создадим модель, которая будет приписывать соответствующие значения при выполнении события. Создайте новый PHP-файл в app/code/local/SmashingMagazine/LogProductUpdate/Model/Observer.php со следующим содержимым:

<?php
/**
* Our class name should follow the directory structure of
* our Observer.php model, starting from the namespace,
* replacing directory separators with underscores.
* i.e. app/code/local/SmashingMagazine/LogProductUpdate/Model/Observer.php
*/
class SmashingMagazine_LogProductUpdate_Model_Observer
{
/**
* Magento passes a Varien_Event_Observer object as
* the first parameter of dispatched events.
*/
public function logUpdate(Varien_Event_Observer $observer)
{
// Retrieve the product being updated from the event observer
$product = $observer->getEvent()->getProduct();

// Write a new line to var/log/product-updates.log
$name = $product->getName();
$sku = $product->getSku();
Mage::log("{$name} ({$sku}) updated", null, 'product-updates.log');
}
}

На этом всё! Можно тестировать

Структура директории нашего модуля теперь должна выглядеть следующим образом:

app
-code
--local
---SmashingMagazine
----LogProductUpdate
-----Model
------Observer.php

-----etc
------config.xml

-etc
--modules
---SmashingMagazine_LogProductUpdate.xml

Теперь когда наш модуль полностью завершен, можно опробовать его! Авторизуйтесь в админ-панель Magento, создайте и обновите какой-нибудь продукт в вашем каталоге, а затем проверьте папку var/log, и вы увидите, что теперь файл product-updates.log заполнен информацией.

Если ничего не появляется или директория не существует вовсе, убедитесь в том, что вы выставили соответствующие права доступа, посредством которых Magento будет записывать информацию в данную директорию, а также необходимо включить ведение лог-файла в самой системе: Panel > System > Configuration > Developer > Log Settings > Enabled.

Данное руководство направлено на то, чтобы помочь вам понять принцип работы модулей Magento. После того, как вы ознакомитесь с этим материалом, у вас будет возможность изучить другие модули в app/code/core, и постараться придумать более продуктивный принцип их работы. Спасибо!
Обнаружили ошибку или мёртвую ссылку?
Выделите проблемный фрагмент мышкой и нажмите CTRL+ENTER.
В появившемся окне опишите проблему и отправьте уведомление Администрации ресурса.
Нужна органическая вечная ссылка из данной статьи? Постовой?
Подробности здесь
Вам понравился материал? Поблагодарить легко!
Будем весьма признательны, если поделитесь этой статьей в социальных сетях:

Опубликовал Design FactoRy   Прочитано (раз): 18256   |   Нет комментариев
Источник материала / оригинал статьи   Распечатать
Другие статьи и новости по теме:
Добавление комментария
Уважаемые пользователи!
При добавлении комментариев на сайт Вам следует учитывать следующее - все комментарии проверяются Администрацией на предмет отсутствия спама. При обнаружении признаков спама, в оставленном Вами комментарии, сам комментарий будет незамедлительно удалён, а Ваш IP-адрес будет забанен без предупреждения! Учётные записи пользователей, рассылающих спам, блокируются/удаляются без права последующего восстановления.

С уважением, Администрация сайта.
* = поля обязательны к заполнению
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Вопрос : Назовите месяц January по-русски
Подтверждение кода безопасности :

Включите эту картинку для отображения кода безопасности
обновить, если не виден код


Промышленное холодильное оборудование
Профессиональное холодильное оборудование для предприятий питания, торговли
aicmontaj.ru
Москва курс маникюр
Выйти замуж без маникюра! Мужчин осталось мало! Звоните свахе сегодня
msk.victoryco.ru
Купить резину
Жидкая резина Plasti Dip от дистрибьютора. Отличные оптовые цены. Гарантия
vse-shini.ru
Популярные публикации


















Свежие шаблоны сайтов каждый день
С миру по нитке
«    Сентябрь 2017    »
ПнВтСрЧтПтСбВс
 123
45678910
11121314151617
18192021222324
252627282930