Частые вопросы по Magento и ответы на них

Частые вопросы по 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, добавление столбца к таблице не повлияет на ранее сохраненные записи и все новые записи будут сохранены в этих столбцах.

 



  1. Sergey:

    Здравствуйте!!! У вас отличная и полезная литература!!! Долго мучаюсь и не могу понять как сделать боковое меню категорий «аккордион» с применением jQuery, подскажите, пожалуйста, как должна выглядеть архитектура этого меню и каким образом будут взаимодействовать jQuery. Правильно ли я думаю, что для этого создаётся новый файл в catalog/navigation/»имя нового файла».phtml. Затем в файле catalog.hml прописывается путь к новому файлу? И дальше я в ступоре…:-( Не понимаю в каком файле (phtml, jquery или CSS) будет прописываться поведение меню… Прошу помогите, пожалуйста, или хотя бы в общих чертах направьте к решению.

    1. 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/

      Надеемся, что соориентировали вас!

  2. Sergey:

    Спасибо большое за отзывчивость!!!:-) Думаю, что всё становится на свои места…:-) Правильно ли я понимаю, что «id блока html-разметки» это будет название файла, который я создал в catalog/navigation/ ? И всё управление и структура прописывается в этом новом файле? Объясните, пожалуйста, на примере файла http://imglink.ru/show-image.php?id=0e10f2dfc3b63aa0ea5f5ac4f79b529f
    Сначала прописывается поведение работы меню html phtml языком? А после уже добавляется часть jQuery, где прописывается как оно будет обертывать дивы в аккордеон? Просто не могу понять какое место отвечает за то, что меню не постоянно работает слева, а исчезает при выборе субкатегории (принцип как в стандартном блоке навигации Magento). Прошу прощения, что задаю столько вопросов, ваш сайт единственный, где откликнулись и смогли помочь в данном вопросе!!!

    1. ZAnatoly:

      Да, вопросов у вас масса:)

      id блока html-разметки — подразумевается id div`а, а в вашем случае, судя по картинке, это ul-список, т.е. обработчик событий яваскрипт нужно вызывать не по id, а по классу (у вас — category-list).
      Что касается второй части вопроса: субкатегории могут исчезать и с помощью и CSS, и JavaScript. Это очень объемная тема, и нужно разбираться в каждом конкретном случае, и отталкиваться от поставленной задачи.

  3. Sergey:

    Было бы классно, если бы вы подготовили урок на данную тему!!!:-) Уже пару недель или больше ищу информацию о создании бокового меню аккордеон в Magento, и как оказалось многих интересует данный вопрос, но в интернете нет соответствующей информации…:-( Приходится разбираться с самых азов и пытаться вникать в язык кодов.:-) Ещё раз благодарю за информацию, она очень помогла и продвинула меня в решении!!!:-)

    1. ZAnatoly:

      Очень приятно, что мы смогли вам помочь! А по поводу идеи для урока — спасибо!

  4. Дмитрий:

    Добрый день, очень много всего полезного, спасибо, а что вы можете посоветовать по разработке модулей для магенто, от новичка-до профессионала?

    1. ZAnatoly:

      Спасибо за ваш интерес к нашему сайту! Вопрос очень сложный и серьезный. Если вкратце, то новичку — учиться и еще раз учиться. А профессионалу — найти свою нишу. Промониторить рынок и понять, какого продукта (модуля) не хватает, и который был бы полезен потребителю. Посмотрите на официальном сайте Мадженто, ну и на codecanyon.net, увидите какие модули популярны и востребованы.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *