Как добавить изображение к объекту

Чтобы добавить изображения к объекту (пусть он будет называться “mod”) без создания новых таблиц связей и хранения, необходимо:

Шаг ​1. В шаблоне вставить следующую строку:

{include file=”common/attach_images.tpl” image_name=”mod_main” image_object_type=”common” image_pair=$mod.main_pair image_object_id=$mod.mod_id image_type=”M”}

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

Параметры:

  • image_name — уникальное имя, идентифицирующее пару изображений для данного объекта.
  • image_object_type — тип объекта, в котором будут храниться изображения в данном случае в таблице cscart_common_images_links, cscart_common_images, cscart_detailed_images.
  • image_pair — массив, содержащий информацию об уже загруженной паре (как его получить — см. ниже).
  • image_object_id — идентификатор объекта, к которому будет присоединяться пара изображений.
  • image_type — тип пары: M — основная, A — дополнительная (в большинстве случаев — только основная).

Шаг ​2. В php коде, который отвечает за обновление объекта пишем:

<?php

fn_attach_image_pairs('mod_main', 'common', 0, 'mod');
?>

Где:

  • ads_main == параметру image_name в шаблоне.
  • common == параметру image_object_type в шаблоне.
  • 0 — идентификатор объекта, к которому привязываются изображения — может быть необязательным, если в шаблоне передан параметр image_object_id. Обязательно задавать, если данная функция используется при создании объекта, т.к. в шаблоне привязки изображений к нему еще нет.
  • mod — имя таблицы, содержащей данный объект (другими словами, это параметр object_table в таблице common_images_links; если таблица со ссылками используется своя, то параметр задавать не нужно — например, для товаров).

Шаг ​3. В php коде, который отвечает за выборку информации об объекте, пишем:

<?php

$mod['main_pair'] = fn_get_image_pairs($mod_id, 'common', 'M', 'mod');
?>

Где:

  • $mod_id — идентификатор объекта, для которого выбираем изображения.
  • common == параметру image_object_type в шаблоне.
  • M == параметру image_type в шаблоне.
  • mod — то же самое, что и последний параметр в fn_attach_image_pairs.

Шаг ​4. В php коде, который отвечает за удаление объекта, пишем:

<?php

fn_delete_image_pairs($mod_id, 'common', 'mod');
?>

Где:

  • $mod_id — идентификатор объекта, для которого удаляем изображения.
  • common == параметру image_object_type в шаблоне.
  • mod — то же самое, что и последний параметр в fn_attach_image_pairs.

Готово — удаление изображений/пар происходит через скрипт image.php; дополнительного кода для удаления указывать не требуется.

Описание всех параметров шаблона attach_images.tpl:

  • image_key — уникальный ключ массива (если используется загрузка нескольких изображений одновременно, по умолчанию — 0).
  • image_name — уникальное имя, идентифицирующее пару изображений для данного объекта.
  • image_object_type — тип объекта, в котором будут храниться изображения.
  • image_object_id — идентификатор объекта, для которого загружаются изображения.
  • image_type — тип пары: M — основной (main), A — дополнительный (additional).
  • icon_title — заголовок для иконки (\$lang.thumbanil по умолчанию).
  • icon_text — описание для иконки (пустой по умолчанию).
  • detailed_title — заголовок для детального изображения (\$lang.popup_larger_image по умолчанию).
  • detailed_text — описание для детального изображения (пустой по умолчанию).
  • hide_titles — если true, то скрывает заголовки и описания.
  • hide_images — если true, то скрывает изображения (оставляет только форму для загрузки).
  • no_detailed — если true, не показывает детальное изображение.
  • delete_pair — если true, показывается ссылка для удаления пары.

Изменения размера в реальном времени

Добавлена возможность изменять размер изображений в реальном времени на витрине. Для этого надо вызвать следующий URL:

image.php?mode=show_thumbnail&image_id=XX&object_type=YY&width=ZZ, где:

  • XX — ID изображения.
  • YY — тип объекта (product, detailed, category, common).
  • ZZ — ширина изображения.

Сгенерированное изображение сохраняется в кэше, так что при следующем вызове пересчета не происходит.