Magento глазами Junior’a

edd7a40ca4164615744e81cd045b2103

Буквально месяц назад мне дали проект магазина, в качестве CMS была выбрана Magento. Хотелось бы предостеречь людей работающих с данным продуктом впервые от ошибок сделанных мной.

Основы

Выбор среды разработки

Думаю стоит сказать о том, что простым редактором с подсветкой кода не отвертеться. Первым делом на что стоит обратить внимание при выборе IDE, это плагины. Нужны они в основном чтобы “прыгать” по классам (да, CMS написана так, что средствами среды разработки этого сделать невозможно) и более комфортно работать с шаблонами в блоках. Мне удалось найти только «условно-бесплатный» Magicento для PHP Storm, постоянно спамивший уведомлениями о новой версии. Но заставить PHP Storm прыгать по методам Magento он не смог. Скачать последнюю версию плагина можно с сайта после донейта или отправки жалобного письма разработчику. Старая версия плагина доступна в репозитории.

Если вы хотите «прыгать» по классам, то phpstorm это уже умеет.
А если вы хотите получить соответствие записи вида Mage::getModel(‘catalog/product’) к имени класса, всем его свойствам и методам, то рекомендую использовать это: gist.github.com/colinmollenhour/937195
Кладете в рут магенто, генерируете карту и подключаете сгенерированную карту во внешних библиотеках phpstorm или в руте проекта.

Отсутствие документации

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

Гибкость системы

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

Разработка

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

Переопределяйте все что можно и используйте эвенты

Запомните, какими бы не были незначительными изменения в классах или шаблонах — переопределяйте используйте эвенты! Это спасет ваше время и время других разработчиков еще не раз. При этом делайте это обдуманно, переопределенный вами класс может поломать чужой модуль.
Про способ с эвентами уже писалось в другой статье. Блоки и классы стоит переопределять в локальной директории, сделать это достаточно просто. Необходимо продублировать полный путь до класса в директории./app/code/local/ и скопировать файл из core или community туда. Приоритеты поиска для вызываемых файлов такие:
1. local — всегда используйте эту директорию для переопределения или создания собственных расширений. Наиболее приоритетными считаются файлы расположенные в данной директории.
2. community — в этой директории лежат расширения разработанные сообществом.
3. core — модули ядра. Никогда не вносите изменения в данной директории.

Для переопределения шаблонов идем в админку, System -> Configuration -> Design и меняем значения в полях блока Themes на название директории в которой будут переопределенные шаблоны. Например создаем директорию по такому шаблону ./app/design/frontend/имятемы/override/ и вписываем override все поля.

Включаем показ ошибок и режим дебага

Из коробки Magento умеет отлавливать ошибки и писать их в логи, но работает это далеко не всегда. На хабре уже была статья, о том как отладить непонятные ошибки в Magento, но и этого бывает недостаточно. Для того чтобы включить показ ошибок, необходимо добавить строчку в корневой “.htaccess”:

SetEnv MAGE_IS_DEVELOPER_MODE "1"
Статичные страницы и блоки

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