8xx8

Блог

Схема блоков в CS-Cart 3.0

| Comments

Менеджер блоков в Cs-cart 3.0 достаточно сложная штука. И я хотел бы сделать попытку объяснить как все таки с ним работать.

Файлы

  • block_cache_properties.php — глобальные апдейт хендлеры для кеша блоков;
  • dispatch_descriptions.php — список диспатчей и соответсвтующих лангвар. Нужно только для генерации списка для поля Dispatch при добавлении/редактировании локации;
  • blocks.php – основная схема блоков;
  • dynamic_objects.php — описание динамических объектов;
  • fillings.php — дополнительные параметры для филингов;
  • templates.php — дополнительные параметры лдя шаблонов.

Основая схема

1
2
3
4
5
6
7
8
  'тип блока' => array (
    'settings' => 'Список настроек (а)',
    'templates' => 'Список шаблонов (б)',
    'content' => 'Список контента (в)',
    'wrappers' =>' Список враперов (г)',
    'icon' => 'Путь до иконки',
    'cache' => 'Параметры кеша, если отсутствует, то блок не кешируется.'
  );

а) Сам блок может иметь настройки которые будут задаваться на странице редактирования блока в панели администрирования на вкладке settings, так же настройки могут иметь шаблоны и филлинги. на странице редактирвоания блока они все отображаются в разных местах, но в итоге хранятся в массиве properties блока и к ним можно получить доступ из шаблона. Так же они передаются в функцию получения списка элементов для перечисляемого типа.

Список настроек предсьтавляет сабой набор пар типа ключ => значение, где ключём будет имя настройки. Оответсвтенно этому имени должна быть определена языковая переменная которая определяет название при выводе этой настройки.

Значемнием будет массив параметров определяющих эту настройку:

1
2
3
4
5
6
7
8
9
10
11
12
'имя_настройки' => array(
    'remove_indent'   => 'Если истинно, то при отображении в админке у настройки не будет отступа справа'
    'required'        => 'Если истинно, то в настройках блока поле будет обязательно для заполнения'
    'option_name'     => 'Имя языковой переменной для названия, если не задано в качестве него будет использоваться имя_настройки'
    'default_value'   => 'Значение по умолчанию'
    'values'          => 'Список вариантов настройки. Массив пар ключ => значение для настроек типа selectbox, multiple checkboxes'
    'no_lang'       => 'Если истинно, то при отображении в админке у списка вариантов занчение варианта будет выводится как есть, иначе интерпретирвоанться как языковая переменная'
    'values_settings' => 'Применяется только с настройкой типа selectbox. В этом параметре задаётся список вариантов и дополнительные настройки, которые будут появлятся только при выборе определённыз вариантов родительского списка. В качестве примера см. схему блока аддона Rss Feed.'
    'picker'        =>' Шаблон пикера. Применяется только с типом настройки picker.'
    'picker_params'   => 'Настройки пикера. Применяется только с типом настройки picker.'
    'template'        => 'Путь к шаблону. применятеся только с типом настройки "template"'
  );

Типы настроек:

  • checkbox — гuалочка;
  • input — поле ввода;
  • input_long — поле ввода с классом input-text-long;
  • multiple_checkboxes — список галочек;
  • text — поле ввода текса типа WYSIWYG;
  • simple_text — обычное поле ввода текста без WYSIWYG;
  • picker — пикер;
  • template — шаблон. Вместо сеттинги будет тоображаться тот шаблон, который указан в параметре template;
  • enum — перечесление объектов. Используется только в секци content

б) Список шаблонов может быть:

1
2
3
4
5
6
  'путь_к_шаблону' => array (
    'settings' => 'Список настроек (см. ниже)',
    'fillings' => 'Массив из филлингов которые доступны для этого шаблона (все сотальные филлинги будут автоматически исключены из списка)',
    'params' => 'Массив параметров, которые будут переданы в функцию получения элементов блока',
    'bulk_modifier' => 'Групповой модификатор. Функция которая применится к элементам блока перед выводом'
  ),

Всё что есть в параметре ‘template’ в схеме блоков будет объединено с параметрами заданными в схеме templates.php, при генерации схемы, ключём является путь к шаблону.

Соответственно по ключу ‘template’ в схеме блоков может быть:

  • А) Список путей к шаблонам с непосредственно полным переченем параметров, в таком случае не потребуется ничего писать в templates.php;
  • Б) Список путей к шаблонам, а все параметры по соотвествующим ключам указаны в templates.php;
  • В) Путь к папке с шаблонами, а все параметры по соотвествующим ключам указаны в templates.php;
  • Г) Название функции которая возвращает список шаблонов, а все параметры по соотвествующим ключам указаны в templates.php или так же возвращаются функцией.

в) В новом блок менеджере любой блок может содержать произвольное колличество переменных которые затем передадуться в шаблон, например имея такой блок:

1
2
3
4
5
6
7
  'test_block' => array (
    'content' => array(
      'some_value' => array(
        'type' => 'text',
      )
    )
  )

В настроках блока в панели администрирования появится поле ввода в которое можно ввести значение. При отображении блока в кастомерке в шаблоне этого блока будет доступна переменная {$some_value} значение которой задано в админке.

В качестве элемента контента может быть любая настройка (см. пункт натсроек), специальный тип перечисление (enum), функция.

С настройками всё просто, то что пользователь сохранит в админке то и пойдёт в шаблон.

Тип перечисление нужен для того чтобы определять списки элементов с различными видами заполнения (fililng), например список продуктов или категорий.

Параметры типа enum:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  'имя_переменной' => array (
    'type' => 'enum',
    'object' => 'Название динамического объекта в схеме.'
    'items_function' => 'Функция генерации элементов'
    'fillings' => array ( // Филлинги, т.е. типы заполнения.
      'manually' => array ( // Ручной тип. Требует наличия параметров пикера.
        'picker' => 'pickers/companies_picker.tpl',
        'picker_params' => array (
          'multiple' => true,
        ),
      ),
      'some_another_filling' => array (
        'params' => array (

        ),
      ),
    ),
  ),

Для неручного филлинга можно задать секцию params в которой будет список теъх параметров который в итоге будет передан в функцию генерации элементов, так же для филлинга можно задать список настроек по ключу settings, аналогично шаблонам или самим блокам.

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

1
2
3
4
  'имя_переменной' => array (
    'type' => 'function',
    'function' => array('fn_get_languages'[, 'param1'][, 'param2'][..]),
    ),

г) В параметре wrapeprs как и в шаблонах может быть либо список враперов, либо путь к папке с ними. дополнительные настройки у них отсутствуют.

д) Если блок должен быть кешируемым то нужно определить ему свойство cache в схеме. В котором по ключу update_handlers перечислить список таблиц, при обновлении которых будет обновляться кэш.

В новом менеджере блоков все те статические блоки объединены в так называемый блок template у коготорого есть только одно свойство template в котором можно выбрать какой-либо шаблон для отображения из папки blocks/static_templates. Если вам нужно именно такой блок, то в аддоне достаточно создать папку blocks/static_templates и разместить там свой шаблон, который автоматичнски добавится к остальным. В принципе этот способ распространяется для всех основных блоков карты, расширить список их шаблонов можно по средствам добавления соотвествующей папки в аддоне.

Comments