Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 15.03.2024)
428420
осіб
347
літаків
325
гелікоптерів
6758
танків
12949
ББМ
10580
артилерія
717
ППО
1017
РСЗВ
13993
машин
26
кораблі і катери
Контрольні нотатки для сертифікаційного екзамену Мадженто-розробника – ч.7
Опубліковано Оновлено: 09.02.2024

Контрольні нотатки для сертифікаційного екзамену Мадженто-розробника – ч.7

Catalog – частка в екзамені: 10%.

 

Товари

Є 6 різних типів товарів, що підтримуються в дефолтній інсталяції Magento:

  • Простий (simple): Проста одиниця фізичного товару
  • Налаштовуваний (configurable): Перший тип композиційних товарів. Дозволяє клієнтам налаштувати свій товар і додати один простий товар до кошика
  • Згрупований (grouped): Другий тип композиційних товарів – згрупований товар, який складається з простих товарів і надає клієнтам можливість обрати необхідну кількість кожного товару
  • Прив’язаний (bundle): Третій тип композитного товару – це сукупність простих товарів для покупки в єдиному товарі
  • Віртуальний (virtual): підтримка нефізичних товарів (які не можна доставити фізично), наприклад, таких як послуги
  • Завантажуваний (downloadable): цифровий, а не фізичний товар (наприклад, комп’ютерна гра, музичний файл і т.п.).

 

Більшість типів товарів реалізуються як частина модуля 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

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *