Статьи

Разработка пользовательских модулей Magento

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

В этой серии я расскажу о разработке пользовательских модулей Magento.

Если вы хотите пойти дальше с развитием Magento, ознакомьтесь с широким спектром полезных расширений Magento на Envato Market.

Расширения Magento на рынке Envato
Расширения Magento на рынке Envato

На протяжении всей этой серии я имею в виду Magento Community Edition 1.7, хотя пользовательские структуры модулей одинаковы во всех версиях Magento. Прежде чем мы начнем разработку самого модуля, давайте быстро разберемся с базовой структурой Magento.

Всякий раз, когда вы устанавливаете новый Magento, вы замечаете следующую структуру каталогов Magento:

Как и любые другие основные платформы, такие как Joomla, CakePHP, CodeIgniter и т. Д., Magento также следует архитектуре на основе MVC, хотя она немного отличается от базовой архитектуры PHP MVC. Здесь я объясню разницу в архитектуре Magento, сравнивая ее с простой архитектурой PHP MVC.

В типичном шаблоне MVC поток приложения выглядит примерно так:

  1. Существует главная точка входа — index.php — откуда определяется весь механизм маршрутизации приложения.
  2. На основе этого механизма маршрутизации и запрошенного шаблона URL приложение вызовет соответствующий контроллер.
  3. Затем контроллер вызывает соответствующие представления.
  4. Наконец, файлы представлений собирают данные из файлов моделей и отображают данные.

Архитектура MVC Magento добавляет несколько уровней в шаблон MVC, но основной поток управления приложением выглядит следующим образом:

  1. Существует главная точка входа — index.php — откуда будет инициализировано все приложение.
  2. На основании запрошенного URL будет вызван соответствующий контроллер.
  3. Контроллер определяет страницы и загружает файлы макетов для этих страниц.
  4. Layout files сообщает контроллерам, какие блокировать файлы для использования.
  5. Блокирующие файлы собирают данные из файлов моделей и помощников и передают их в файлы шаблонов.
  6. Файлы шаблонов получают данные и отображают HTML.

Первоначально это может быть трудно понять, так как он содержит несколько дополнительных слоев. Чтобы лучше ознакомиться с процессом управления, давайте разработаем специальный модуль «Hello World».

  • Я предполагаю, что у вас уже есть рабочая копия Magento с версией 1.7 или 1.7+ (или как версия не имеет значения на данном этапе)
  • Отключить кеш. Чтобы отключить кэш, перейдите в Панель администрирования Magento> Система> Управление кешем> Установите флажки для всех типов кеша с левой стороны> Выберите Действие: отключите в правом верхнем раскрывающемся списке> нажмите Отправить.

Magento содержит три типа пулов кодов, в которых находятся все пользовательские и основные модули Magento.

  1. Базовые пулы содержат все основные модули, которые по умолчанию поставляются с установкой Magento. Эти модули написаны разработчиками Magento. Рекомендуется не изменять эти модули, потому что всякий раз, когда вы обновите установку Magento, все основные модули будут перезаписаны, а ваши изменения будут потеряны.
  2. Пулы сообщества содержат все модули, то есть пользовательские модули, разработанные сторонними программистами для установки через Magento Connect . Эти модули обычно расширяют базовые модули и предлагают свои собственные функции, которые часто можно использовать в любом месте Magento.
  3. Локальные пулы содержат все пользовательские модули, которые будут использоваться для конкретного проекта, но не перезаписаны в Magento Connect.

Таким образом, у нас есть два варианта пулов: Community или Local. Поскольку мы работаем над собственным проектом, мы собираемся использовать локальный пул, хотя нет никаких ограничений на использование пула сообщества.

Структура

Модули Magento состоят из следующих компонентов:

  • Блоки содержат функции, которые используются для отображения данных в шаблонах.
  • Модели содержат бизнес-логику модулей.
  • Resource Models содержит функции, которые используются для взаимодействия с базой данных.
  • Контроллеры определяют макет страницы и блокируют файлы и загружаются при запросе URL.
  • etc содержит файлы конфигурации в форматах XML, которые сообщают Magento, сколько файлов у модулей и как модуль взаимодействует.
  • Помощники содержат функции, которые используются для определения общей бизнес-логики (например, изменение размера изображения, проверка). Эти функции можно использовать в любом месте приложения Magento
  • sql содержит сценарии SQL для создания, изменения или удаления таблиц SQL.

Нам нужно дать имя нашему модулю. Обычно имена модулей Magento состоят из двух частей: <Пространство имен> _ <Модуль>. Лучшая практика присвоения имени модулю Magento — выбрать <Namespace> в качестве автора или названия компании и <Module> в качестве фактического имени модуля.

Исходя из этих правил именования, я даю нашему модулю имя Chiragdodia_Mymodule . Мы будем ссылаться на это имя на протяжении всей этой серии.

Давайте создадим базу каталогов на вышеупомянутой структуре. Перейдите в направлении установки Magento, затем перейдите в app/code/local   и создайте каталоги, как показано ниже.

Далее мы настроим и активируем наш модуль, создав конфигурационный файл Chiragdodia_Mymodule.xml в app/etc/modules каталог . Этот каталог содержит файлы конфигурации для всех модулей.

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

Этот файл расскажет Magento о местонахождении нашего модуля. В active теге мы указали true чтобы включить наш модуль. Если все правильно, то вы найдете свой модуль в Панель администратора Magento> Система> Конфигурация> Дополнительно> Дополнительно> Отключить список вывода модулей . Отсюда вы можете включить и отключить ваш модуль.

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

Перейдите в app/code/local/Chiragdodia/Mymodule/etc   и создайте config.xml   файл, который будет содержать следующее содержание

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<?xml version=»1.0″?>
<config>
    <modules>
        <Chiragdodia_Mymodule>
            <version>0.1.0</version> <!— Version number of your module —>
        </Chiragdodia_Mymodule>
    </modules>
    <frontend>
        <routers>
            <mymodule>
                <use>standard</use>
                <args>
                    <module>Chiragdodia_Mymodule</module>
                    <frontName>mymodule</frontName>
                </args>
            </mymodule>
        </routers>
    </frontend>
</config>

Давайте пройдемся по строке, чтобы понять каждый тег. Здесь первый тег <module> который содержит название и версию нашего модуля. Номер версии очень важен, когда дело доходит до обновления вашего модуля.

Тег <frontend> сообщит Magento об отправленном контроллере. Внутри <frontend> мы определили <routers> который сообщает Magento, как получить доступ к нашим контроллерам через механизм маршрутизации.

В <mymodule> мы определили имя модуля в <module> имя тега и <frontName> интерфейса в <frontName> . Используя имя внешнего интерфейса, мы можем получить доступ к нашему модулю во внешнем интерфейсе, например yoursitename.com/index.php/mymodule/index .

Позвонив по yoursitename.com/index.php/mymodule или yoursitename.com/index.php/mymodule/index Magento yoursitename.com/index.php/mymodule/index поиск действия индекса файла контроллера вашего модуля. Таким образом, нам нужно создать наш файл контроллера.

Зайдите в app/code/local/Chiragdodia/Mymodule/controllers   и создайте файл IndexController.php   со следующим содержанием.

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

1
2
3
4
5
6
7
8
<?php
class Chiragdodia_Mymodule_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        echo «Hello tuts+ World»;
    }
}

Теперь откройте URL yoursite.com/index.php/mymodule/index   будет напечатано «Hello Tuts + World». Круто — мы наконец-то закончили с нашим первым модулем hello world.

Здесь мы расширили класс   Mage_Core_Controller_Front_Action   который содержит все методы, которые используются в маршрутизации URL. Имя класса Magento отражает местоположение файла класса. Так что класс Mage_Core_Controller_Front_Action   находится в папке Mage> Core> Controller> Front> Action.php

Смотрите имя класса нашего контроллера, которое называется Chiragdodia_Mymodule_IndexController . Контроллер Magento должен быть назван таким образом, чтобы он отражал (<module>tag)_(Action Controllername)(keyword Controller).

  • <module> tag = Chiragdodia_Mymodule (мы определили этот тег в config.xml )
  • Имя Controllername действия = индекс
  • Контроллер действий, за которым следует ключевое слово Controller

Основываясь на этом паттерне, наш контроллер называется Chiragdodia_Mymodule_IndexController

Теперь посмотрите шаблон URL, который следует ниже шаблону маршрута
yoursite.com/index.php/frontendname/actionControllername/actionmethod

  • имя фронта = мой модуль
  • actionControllername = Index
  • actionmethodname = Index

Основываясь на этом шаблоне URL, URL нашего модуля будет yoursite.com/index.php/mymodule/index/index . Вы также можете получить к нему доступ, используя yoursite.com/index.php/mymodule поскольку всякий раз, когда вы не указали имя actionController или actionmethod , Magento по умолчанию загружает контроллер индекса и действие индекса.

Теперь давайте создадим еще одно действие: testAction .

01
02
03
04
05
06
07
08
09
10
11
12
<?php
class Chiragdodia_Mymodule_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        echo «Hello tuts+ World»;
    }
    public function testAction()
    {
        echo «test action»;
    }
}

Мы можем получить доступ к testAction с помощью URL yoursite.com/index.php/mymodule/index/test .   Как объяснялось ранее здесь

  • имя фронта = мой модуль
  • actionControllername = Index
  • actionmethodname = test

Так работает контроллер в Magento.

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

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

А пока создайте свой собственный модуль и дайте мне знать обо всем, что доставляет вам неприятности.

Если вы все еще не знаете, как действовать после прочтения этого руководства, попробуйте связаться с одним из разработчиков Magento в Envato Studio. Они могут помочь вам со всеми видами проблем с Magento, большими и маленькими. Вот несколько примеров:

Настройте веб-сайт Magento или запросите расширенную настройку, например:

  • модификация макета
  • модификация ползунков
  • пользовательское меню
  • устранение проблем
  • и более

Этот провайдер сделает любое из следующего:

  • разработать собственный модуль
  • установить тему Magento
  • настроить с вашим индивидуальным дизайном (логотип, цвет, шрифт, фон)
  • создайте свои первые 20 категорий / подкатегорий
  • настроить платежи и местные валюты
  • и более

Настройте тему Magento по разумной цене всего за один день.

Этот провайдер предлагает множество услуг Magento, в том числе:

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

Если эти решения не подходят для вас, попробуйте один из десятков других доступных в Envato Studio .