Catalog – частка в екзамені: 10%.
Є 6 різних типів товарів, що підтримуються в дефолтній інсталяції Magento:
Більшість типів товарів реалізуються як частина модуля Mage_Catalog
, окрім Mage_Bundle
та Mage_Downloadable
.
Згрупований, Прив’язаний та Налаштовуваний товари реалізують відносини між предками та нащадками, коли інші товари (за замовчуванням, прості, віртуальні або завантажувані) призначуються для головного товару. Потім він обробляє дані про товари для всієї колекції (наприклад, для згрупованого, прив’язаного або налаштовуваного їх назви товарів, ціни та статус).
Завантажувані та Прив’язані товари мають додаткові таблиці в базі даних, а решта поділяються між усіма іншими типами товарів. Налаштовані товари мають додаткову таблицю для посилання на товари нащадки, catalog_product_super_link
.
Щоб створити свій тип товару, який розширює один із вбудованих типів товарів, повинна бути розширена відповідна модель типу товару. В іншому випадку новий тип товару повинен розширити клас Mage_Catalog_Model_Product_Type_Abstract
.
Необхідно також додати запис у config.xml модуля:
<global> <catalog> <product> <type> <{name}> <label></label> <model></model> <composite></composite> <index_priority></index_priority> </{name}> </type> </product> </catalog> </global>
Більш складні товари можуть потребувати інших індивідуальних областей, таких як цінова модель і обробник індексних даних.
Коли справа відноситься до одного товару, ціна завжди розраховується на льоту. EAV атрибут price
завантажується разом із товаром, а остаточна ціна обчислюється за ціновою моделлю Mage_Catalog_Model_Product_Type_Price
.
Деякі типи товарів вирішують це по-різному. У цьому випадку вони розширюють цей клас та реалізують свою власну логіку. Наприклад, Налаштовуваний товар перезаписує getFinalPrice()
і додає додаткову логіку. Цю користувальницьку модель можна вказати в config.xml за допомогою тегу <price_model>
.
Колекції товарів, однак, використовують індекс цін для отримання попередньо розрахованих цін, що виключає необхідність розрахувати їх для кожного товару.
Остаточна ціна може бути коригована обсерверами (спостерігачами події) catalog_product_get_final_price
. За замовчуванням лише модуль Mage_CatalogRule
стежить за цією подією.
Іншим способом переписати ціну на продукцію є просте призначення її для товару. Якщо ціна встановлена, товар не буде перераховувати її.
Ціна на рівні товару відрізняється від звичайної ціни (хоча враховується при розрахунку ціни). Вона реалізується на базі переліку груп клієнтів та значення мінімальної кількості для кожного рівня. Рівні цін відображаються в таблиці, використовуючи шаблон catalog/product/view/tierprices.phtml
.
Спеціальні параметри товару обробляються під час обчислення кінцевої ціни. Кожна опція має своє власне визначення ціни, яке додається до кінцевої ціни.
Групові ціни, рівні цін та спеціальні ціни розглядаються одночасно ($priceModel->getBasePrice()
), і найменша з трьох (або чотирьох, якщо ви включаєте звичайну ціну) обирається в якості базової ціни товару.
Модуль Mage_Tax
використовує податковий клас товару і визначає, чи враховано/не враховано в ціні товару податок, щоб визначити правильну ставку, яку потрібно застосувати.
Для розрахунку податку на товар використовуються наступні фактори:
Класи, що відповідають за рендеринг багаторівневої навігації:
Mage_Catalog_Block_Layer_View
: фільтри та параметриMage_Catalog_Block_Layer_State
: контролює поточні фільтриДля впровадження багаторівневої навігації по атрибутам із власними оригінальними моделями потрібно буде перезаписати метод Mage_Catalog_Model_Layer_Filter_Abstract::apply()
, щоб визначити спосіб фільтрування колекції товарів.
Багаторівнева навігація рендериться блоками Mage_Catalog_Block_Layer_View
і Mage_Catalog_Block_Layer_State
, які використовують блоки фільтрів для окремих фільтрів.
Багаторівнева навігація використовує індексні таблиці для більшості фільтрів, наприклад, ціна, індекс атрибутів товару, індекс decimal товару.
Категорії в базі даних
Ієрархія категорій керується шляхом збереження ідентифікатора (ID) батьківської категорії. Повна ієрархія відображається у стовпці path
(ID, розділені косою рискою). Існує спеціальна категорія parent_id
з 0
. Це справжня коренева (root
) категорія, а кожна з інших кореневих категорій, визначених у Magento, використовує її як загальну батьківську.
Для читання та керування деревом категорій з бази даних використовуються два різних класи залежно від того, чи включено плаский каталог (flat catalog), Mage_Catalog_Model_Resource_Category_Tree
та Mage_Catalog_Model_Resource_Category_Flat
.
Перевага пласких категорій полягає в тому, що вони швидше обробляють запити. Однак вони повинні перебудовуватись з EAV таблиць кожного разу, коли відбувається зміна.
getChildren()
: повертає рядок з найближчими нащадками, розділені комамиgetAllChildren()
: повертає рядок або масив всіх ідентифікаторів (ID) нащадківgetChildrenCategories()
: повертає колекцію найближчих дочірніх категорій
Важливо. Якщо увімкнути плаский каталог, то буде повернуто лише дочірні категорії з налаштуванням include_in_menu = 1
. У обох випадках повертаються лише активні категорії.
Цінові правила каталогу
Цінові правила каталогу застосовують знижки для товарів на основі дати, товару, веб-сайту та групи клієнтів.
Коли для товару викликається getFinalPrice()
, спрацьовує подія catalog_product_get_final_price
. Вона спостерігається за допомогою Mage_CatalogRule_Model_Observer
, який потім шукатиме будь-яке цінове правило каталогу, яке застосовується до товару. У разі необхідності, він потім переглядає таблицю цін бази даних і заносить ціну назад до моделі товару як Varien поле даних final_price
.
У базі даних таблиця catalogrule
описує правила, їх умови та дії. Таблиця catalogrule_product
містить відповідні товари та деяку інформацію щодо правил. Тим часом catalogrule_product_price
містить ціну після застосування правила.
Таблиці з пласким каталогом керуються індексаторами каталогів. Якщо активовано автоматичне відновлення індексів, індексатори каталогів перебудовуються кожного разу, коли товар, категорія або пов’язані об’єкти оновлюються. Метод _afterSave()
викликає процес індексації. В іншому випадку вони повинні бути переіндексовані вручну через панель адміністратора.
Тип товару впливає на індекс цін та індекс запасу, де товари можуть визначати свої власні індексатори (в config.xml) для обробки своїх даних для цих індексів.
Модуль Mage_Index
забезпечує структуру, з якою можуть бути створені індивідуальні індекси, які допоможуть оптимізувати роботу сайту. Клас Mage_Index_Model_Indexer_Abstract
повинен бути розширений, щоб створити новий індекс, реалізуючи методи _registerEvent()
та _processEvent()
. І не забуваючи зареєструвати його в config.xml:
<global> <index> <indexer> <{name}>{model}</{name}> </indexer> </index> </global>
Переклад українською: SebWeo
Якщо ви плануєте розмістити веб-сайт в мережі Інтернет, дуже важливо знайти для нього швидкий і…
Навчання за кордоном вже давно асоціюється з якісною освітою, новими можливостями та безліччю перспектив. Але…
Вибір майстра для ремонту та перетяжки меблів – завдання, яке потребує вдумливого підходу. Адже від…
Вибір ідеального хостингу під свій сайт може бути досить заплутаною справою, особливо коли існує багато…
Щоб уникати помилок, потрібно набиратися досвіду; щоб набиратися досвіду, потрібно робити помилки Лоуренс Пітер
Коротке визначення Чорного SEO Чорне СЕО (або Чорна оптимізація) — це будь-яка практика, метою якої…