Частые вопросы по Magento и ответы на них
Очень часто пользователи Мадженто сталкиваются с такими вопросами, ответы на которые тяжело найти. Поэтому мы постарались собрать в одном месте наиболее популярные из таких вопросов, и наиболее полно на них ответить.
Когда нужно очистить кэш, чтобы увидеть изменения в Magento?
Всякий раз, когда вы добавили/изменили файлы XML, JS, CSS.
Как включить CMS блок в файле шаблона (.phtml)?
Блоки контента из .phtml-файла шаблона вызываются:
echo $this->getLayout()->createBlock("cms/block")->setBlockId("id_staticheskogo_bloka")->toHTML();
где id_staticheskogo_bloka — это уникальный идентификатор (ID) статического CMS-блока.
Как подключить файлы JavaScript/CSS в Magento?
С помощью тегов в XML файлах структуры (например, в основных файлах шаблона — local.xml, page.xml)
<action method="addJs"><script>js/yourfile.js</script></action> <action method="addCss"><stylesheet>css/yourstyle.css</stylesheet></action>
ИЛИ
<action method="addItem"><type>skin_js</type><name>js/yourfile.js</name></action> <action method="addItem"><type>skin_css</type><name>css/yourstyle.css</name></action>
Наиболее часто используемые типы блоков?
Обычно используются следующие типы блоков:
core/template, page/html, page/html_head, page/html_header, page/template_links, core/text_list, page/html_wrapper, page/html_breadcrumbs, page/html_footer, core/messages, page/switch.
Некоторые блоки, такие как content, left, right и т.д. – это блоки типа core/text_list. Когда эти блоки рендерятся, все их дочерние блоки рендерятся автоматически, без необходимости вызова метода getChildHtml().
Как работает дизайн в Magento
Смотрите урок: Понимание логики дизайна для Magento
Что такое «магические методы» в Magento?
Методы PHP, начинающиеся с двойного подчеркивания, называют магическими методами. С их помощью вы можете определить поведение вашего объекта при различных манипуляциях с его экземпляром.
Magento использует магические методы
__call(), __get(), __set(), __uns(), __has(), __isset(), __toString(), __construct()
и т.д.
Более подробную информацию об этих методах вы можете найти внутри класса Varien_Object.
Подробная информация о магических методах в PHP: http://php.net/manual/en/language.oop5.magic.php
Сколько таблиц в базе данных создает Magento при создании нового модуля?
Magento создает 6 таблиц: module, module_datetime, module_decimal, module_int, module_text і module_varchar. Первая – это главная таблица, а остальные 5 хранят данные атрибута в различных типах данных. Например, целые значения запишутся в таблицу module_int, значения цен в таблицу module_decimal и т.д.
Где в базе данных хранится связь между настраиваемым товаром и простым товаром?
Эта связь хранится в 2 таблицах базы данных:
- catalog_product_relation
- catalog_product_superlink_table
Как сделать перевод Magento
Смотрите урок: Как перевести Magento на русский
Что такое архитектура MVC в Magento?
Для начала определимся с понятием MVC. MVC — это аббревиатура от Model-View-Controller (Модель – Представление – Контроллер). Любое приложение, которое использует разделение на данные, бизнес-логику и пользовательский интерфейс – можно назвать MVC.
Magento также использует логику MVC: контроллеры (для запроса/ответа маршрутизации), Block (для визуализации содержимого), Model (для бизнес-логики), Resource/Mysql4 (для операций с базами данных), etc (для файлов конфигурации конкретных модулей), Helper (для общих функций) , SQL (для сценариев установки), макет — Layout (для подключения блока с шаблонами для каждого действия контроллера) и шаблон/.phtml файл (для Представления).
Более детально архитектура Мадженто описана в статье: Структура Magento – архитектура файлов CMS
Как работает Magento ОRМ?
ОRМ – эта аббревиатура переводится как объектно-реляционное отображение. Это метод программирования, который используется для преобразования различных типов данных объектов. Так, с помощью этой технологии, базы данных связываются с концепциями объектно-ориентированного языка программирования (MVC).
Все модели Magento, которые взаимодействуют с базой данных, наследуются от класса Mage_Core_Model_Abstract, который потом наследуются от Varien_Object.
Пример работы ORM: когда вы хотите получить некоторые данные в Magento, вы вызываете это так:
Mage::getModel('module/model')->load(1);
где 1 – это первичный ID ключ некоторой Регулярной/Простой таблицы.
Что такое EAV в Magento?
EAV – это модель данных Entity-Attribute-Value (Сущность-Атрибут-Значение), которая позволяет добавлять неограниченное количество колонок в базу данных. Так, по EAV, есть одна таблица, которая содержит все «атрибуты» данных (имена полей таблиц), и другие таблицы, которые содержат «сущности» (ID или первичный ID) и значение (значение для этого идентификатора) напротив каждого атрибута.
В Magento есть одна таблица для хранения значений атрибутов, которая называется eav_attribute и 5-6 таблиц, которые содержат сущности и данные в нормализованной форме:
- eav_entity, eav_entity_int (для хранения целых значений),
- eav_entity_varchar (для хранения переменных значений),
- eav_entity_datetime (для хранения значений даты и времени),
- eav_entity_decimal (для хранения десятичных значений/с плавающей точкой),
- eav_entity_text (для хранения текстовых (тип MySQL Text) значений).
EAV в Мадженто должно использоваться только тогда, когда вы не уверены в количестве полей таблицы, которые могут изменяться в будущем. Основное преимущество EAV – это например, когда вы захотите добавить поля таблицы в будущем, при уже имеющимся тысячам или миллионам записей в таблице. В обычной таблице, если вы добавите к ней поля с такими объемами данных, они могут нарушить всю вашу таблицу. В то время как в EAV, добавление столбца к таблице не повлияет на ранее сохраненные записи и все новые записи будут сохранены в этих столбцах.
Sergey
Здравствуйте!!! У вас отличная и полезная литература!!! Долго мучаюсь и не могу понять как сделать боковое меню категорий «аккордион» с применением jQuery, подскажите, пожалуйста, как должна выглядеть архитектура этого меню и каким образом будут взаимодействовать jQuery. Правильно ли я думаю, что для этого создаётся новый файл в catalog/navigation/»имя нового файла».phtml. Затем в файле catalog.hml прописывается путь к новому файлу? И дальше я в ступоре…:-( Не понимаю в каком файле (phtml, jquery или CSS) будет прописываться поведение меню… Прошу помогите, пожалуйста, или хотя бы в общих чертах направьте к решению.
ZAnatoly
Здравствуйте! Спасибо за ваш интерес к нашему сайту!
К сожалению, чтобы полностью ответить на ваш вопрос, нужно создавать новый очень большой урок.
Но соориентировать вас мы, все-таки, попытаемся.
1) создаете свой шаблон меню в catalog/navigation/ (phtml-файл)
2) подключаете блок шаблона меню в макете (catalog XML) в нужную секцию (reference name left/right)
3) у вас должны быть подключены скрипты jQuery и jQueryUI
4) добавляете в шаблон меню (phtml-файл) обработчик событий яваскрипт (по id блока html-разметки), который будет все вложенные div`ы «оборачивать» аккордеоном.
инструкция по аккордеону находится здесь: https://jqueryui.com/accordion/ и здесь http://api.jqueryui.com/accordion/
Надеемся, что соориентировали вас!
Sergey
Спасибо большое за отзывчивость!!!:-) Думаю, что всё становится на свои места…:-) Правильно ли я понимаю, что «id блока html-разметки» это будет название файла, который я создал в catalog/navigation/ ? И всё управление и структура прописывается в этом новом файле? Объясните, пожалуйста, на примере файла http://imglink.ru/show-image.php?id=0e10f2dfc3b63aa0ea5f5ac4f79b529f
Сначала прописывается поведение работы меню html phtml языком? А после уже добавляется часть jQuery, где прописывается как оно будет обертывать дивы в аккордеон? Просто не могу понять какое место отвечает за то, что меню не постоянно работает слева, а исчезает при выборе субкатегории (принцип как в стандартном блоке навигации Magento). Прошу прощения, что задаю столько вопросов, ваш сайт единственный, где откликнулись и смогли помочь в данном вопросе!!!
ZAnatoly
Да, вопросов у вас масса:)
id блока html-разметки — подразумевается id div`а, а в вашем случае, судя по картинке, это ul-список, т.е. обработчик событий яваскрипт нужно вызывать не по id, а по классу (у вас — category-list).
Что касается второй части вопроса: субкатегории могут исчезать и с помощью и CSS, и JavaScript. Это очень объемная тема, и нужно разбираться в каждом конкретном случае, и отталкиваться от поставленной задачи.
Sergey
Было бы классно, если бы вы подготовили урок на данную тему!!!:-) Уже пару недель или больше ищу информацию о создании бокового меню аккордеон в Magento, и как оказалось многих интересует данный вопрос, но в интернете нет соответствующей информации…:-( Приходится разбираться с самых азов и пытаться вникать в язык кодов.:-) Ещё раз благодарю за информацию, она очень помогла и продвинула меня в решении!!!:-)
ZAnatoly
Очень приятно, что мы смогли вам помочь! А по поводу идеи для урока — спасибо!
Дмитрий
Добрый день, очень много всего полезного, спасибо, а что вы можете посоветовать по разработке модулей для магенто, от новичка-до профессионала?
ZAnatoly
Спасибо за ваш интерес к нашему сайту! Вопрос очень сложный и серьезный. Если вкратце, то новичку — учиться и еще раз учиться. А профессионалу — найти свою нишу. Промониторить рынок и понять, какого продукта (модуля) не хватает, и который был бы полезен потребителю. Посмотрите на официальном сайте Мадженто, ну и на codecanyon.net, увидите какие модули популярны и востребованы.