8xx8 (Андрей Кулаков)

Творческая мастерская

CS-Cart 3.0: Динамические объекты в менеджере блоков

| Comments

Динамический объект в менеджере блоков – это любой объект карты для которого можно сменить контект какого-либо блока и его статус, на детальной странице этого объекта.

В стандартной поставке уже определены 5 видов динамических объектов, это Продукты, Страницы, Категории, Компании (только для редакции Multivendor), Новости.

Прикладное значение

Рассмотрим данный функционал на примере продуктов, потому как для всего остального это будет работать схожим образом.

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

Так же при включении/выключении блока на странице редактирования продутка, его состаняние будет сохраняться именно для этого продукта.

В менеджере блоков на локации с dispatch=products.view, при редактировании любого блока, у него есть дополнительная вкладка Status, на которой можно задать для каких-либо продуктов статус отличный от установленного по умолчанию, т.е. включить блок где-то, если он выключен глобально и наоборот.

Принцип работы

Функционал динамических объектов реализуется в блок менеджере автоматически по средствам описания объекта в схеме dynamic_objects, по этому при желании можно дополнить эту схему в своём аддоне любым дополниительным объектом, как например расширяет общую схему аддон News & Emails.

Описание схемы на примере продуктов:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
array(
  // Название динамического объекта, будет использоваться в качестве object_type
  'products' => array (
    // Страница редактирования динамического объекта, на которой должна отобразиться вкладка Blocks в административной части сайта
    'admin_dispatch' => 'products.update',

    // Адрес страницы на которой в клинтской зоне и в панели управления блоками будет доступна работа с динамическим объектом
    'customer_dispatch' => 'products.view',

    // Ключ в $_REQUEST по которому будет определяться идентификатор объекта
    'key' => 'product_id',

    // Настройки пикера, который будет использоваться в административной части сайта
    'picker' => 'pickers/products_picker.tpl',
    'picker_params' => array (
      'type' => 'links',
    ),
  ),
)

Когда пользователь запрашивает, напрмер, страницу с dispatch=products.view, то магазин определяет, что эта страница принадлежит динамическому объекту products и ищет в пришедших в скрипт параметрах product_id. Если такой находится, то все данные для генерации страницы будут запрошены через API блоков с указанием соответствующего типа и идентификатора, если не был по диспатчу найден тип блока в схеме или ключевой параметр, то данные будут генерироваться без учёта динамического объекта, то есть выведется всё со значениями установленными глобально.

Comments