Изображения

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

Подключение

Подключаемая часть – файл modules/images /images .inc.php. В нем описан класс Images _inc. В модуле к объекту класса можно обратиться через переменную $this->diafan->_images . Экземпляр класса создается при первом вызове переменной.

Методы

array get (string $variation, integer $element_id, string $module_name, string $element_type, integer $site_id, string $alt, [integer $param_id = 0], [integer $count = 0], [string $link_to = ''], [string $tmpcode = '']) – Получает изображения, прикрепленные к элементу модуля.

  • string $variation: размер изображения, указанный в настройках модуля
  • integer $element_id: номер элемента, к которому прикреплены изображения
  • string $module_name: название модуля, по умолчанию модуль, прикрепленный к текущей странице
  • string $element_type: тип данных (element – элемент (по умолчанию), cat – категория, brand – производитель)
  • integer $site_id: страница сайта, к которой прикреплен элемент
  • string $alt: альтернативный текст получаемых изображений
  • integer $param_id: номер параметра, к которому прикреплено изображение
  • integer $count: количество изображений
  • string $link_to: размер изображения, на который ведет ссылка
  • string $tmpcode: временный идентификационный код элемента, к которому прикреплены изображения

Пример:

// получаем два изображения, прикрепленные к товару,
// ссылка с изображения ведет на увеличенную копию изображения,
// в модуле «Магазин» в файле modules/shop/shop.model.php
$images = $this->diafan->_images->get("medium", $id, "shop", "element", $site_id, "Название товара", false, 2, "large");

// выводим полученные файлы в шаблоне модуля
// в файле modules/shop/views/shop.view.id.php
foreach($images as $img)
{
    echo
'<a href="'.BASE_PATH_HREF.$img["link"].'">'
    
.'<img src="'.$img["src"].'" width="'.$img["width"]
    .
'" height="'.$img["height"]
    .
'" alt="'.$img["alt"].'" title="'.$img["title"].'">'
    
.'</a> ';
}

Все размеры изображения содержатся в массиве $img["vs"] для каждого изобржения в цикле. Ключами массива являются теги размера, указанные в настройках модуля.

Пример:

// выводим изображения с тегом preview
foreach($images as $img)
{
    echo
'<img src="'.$img["vs"]["preview"].'">';
}

Рассмотрим как это можно использовать в шаблоне модуля.

Пример:

В настройках модуля «Интернет магазин» для товаров в списке размеров изображения («Генерировать размеры изображений») есть три созданные системой размера, помеченные тегами "large", "medium", "preview". Веб-мастер создал дополнительный размер изображения в интерфейсе «Обработка изображений». В настройках модуля он добавил этот размер и задал ему тег "new". Настройки применены к уже загруженным изображениям.

Теперь в шаблоне карточки товара modules/shop/views/shop.view.id.php он может обратиться к новому размеру изображения следующим образом:

// цикл по всем загруженным изображениям
foreach ($result["img"] as $img)
{
    
// выводит изображение, помеченное тегом "medium"
    
echo '<img src="'.$img["src"].'" width="'.$img["width"].'" height="'.$img["height"].'" alt="'.$img["alt"].'" title="'.$img["title"].'">';

    
// выводит изображение, помеченное тегом "large"
    
echo '<img src="'.BASE_PATH.$img["link"].'">';

    
// выводит изображение, помеченное тегом "new"
    
echo '<img src="'.$img["vs"]["new"].'">';
}

Как видно из примера размер изображения (ширина "width" и высота "height") определяются только для изображения, помеченного тегом "medium". Если Вы зададите эти атрибуты для любого другого размера изображения, то изображение просто будет растянуто или сжато под указанные размеры браузером, что приведет к его искаженному отображению.

В данном примере переменная $img["link"] содержит ссылку на размер, помеченный тегом "large". В списке товаров эта пременная может содержать ссылку на карточку товара (если выведены не все изображения). Поэтому ссылка относительная и ее следует использовать вместе с константами BASE_PATH или BASE_PATH_HREF.

Во всех остальных шаблонах модулей данные о изображениях представлены в этом же формате. Если выводиться карточка элемента, то изображения записаны в пемеренную $result["img"]. Если изображения выводяться в списке элементов, то $result заменяем на название переменной, которая содержит данные об элементе в цикле. Например, для списка товаров это переменная $row. Для списка категорий это переменная $cat, для списка подкатегорий это переменная $child.

Именно в модуле «Интернет магазин» в карточке товара есть еще переменная $img["preview"], которая содержит ссылку на изображения размера "preview", если он есть в настройках модуля. В этом случае можно еще добавить вывод этого размера:

// если в настройках задан размер изображения, помеченный тегом "preview"
if($result["preview_images"])
{
    
// цикл по всем загруженным изображениям
    
foreach ($result["img"] as $img)
    {
        
// выводит изображение, помеченное тегом "preview"
        
echo '<img src="'.$img["preview"].'">';
    }
}

array prepare (integer $element_id, string $module_name, [string $element_type = 'element'], [integer $param_id = 0]) – Запоминает данные об элементах, которым нужно вывести прикрепленные изображения.

  • integer $element_id: номер элемента, к которому прикреплены изображения
  • string $module_name: название модуля, по умолчанию модуль, прикрепленный к текущей странице
  • string $element_type: тип данных (element – элемент (по умолчанию), cat – категория, brand – производитель)
  • integer $param_id: номер параметра

Пример:

// в этом примере будет выполенено три SQL-запроса к базе данных для получения изображений ко всем заданным объявлениям
$ids = array(3, 5, 7);
foreach(
$ids as $id)
{
    
$images[$id] = $this->diafan->_images->get('medium', $id, 'ab', 'element', 5, "Объявление", false, 2, "large");
}

Пример:

// в этом примере будет выполен один SQL-запрос к базе данных для получения изображений ко всем заданным объявлениям
$ids = array(3, 5, 7);
foreach(
$ids as $id)
{
    
$this->diafan->_images->prepare($id, 'ab');
}
foreach(
$ids as $id)
{
    
$images[$id] = $this->diafan->_images->get('medium', $id, 'ab', 'element', 5, "Объявление", false, 2, "large");
}

void delete (integer|array $element_ids, string $module_name, [string $element_type = 'element'], [integer $param_id = false], [integer $trash = true]) – Удаляет прикрепленные изображения.

  • integer|array $element_ids: номер одного или нескольких элементов
  • string $module_name: название модуля
  • string $element_type: тип данных (element – элемент (по умолчанию), cat – категория, brand – производитель)
  • integer $param_id: номер дополнительной характеристики с типом «Изображения»
  • integer $trash: режим удаления (true - непосредственное удаление, false - маркировка записи, как удаленной)

Пример:

//удаляем все изображения, прикрепленные к категории ID=3 в файловом архиве
$this->diafan->_images->delete(3, "files", "cat");

//удаляем все изображения, прикрепленные к категориям ID=3,5,6 в файловом архиве
$this->diafan->_images->delete(array(3, 5, 6), "files", "cat");

void clear ([string $module_name = false]) – Удаляет записи, ранее маркированные, как удаленные.

  • string $module_name: название модуля

void delete_row (array $row) – Удаляет одно изображение.

  • array $row: информация о изображении, записанная в базу данных

Пример:

// получаем данные об изобарежнии ID=3
$row = DB::query_fetch_array("SELECT * FROM {images} WHERE id=3");

//удаляем изображение
$this->diafan->_images->delete_row($row);

integer copy_row (integer $id, [integer $element_id = false], [string $tmpcode = false]) – Копирует одно изображение.

  • integer $id: номер записи в таблице
  • integer $element_id: номер элемента, к которому прикреплены изображения
  • string $tmpcode: временный идентификационный код элемента, к которому прикреплены изображения

void delete_module (string $module_name) – Удаляет все изображения модуля.

  • string $module_name: название модуля

Пример:

// удалит изображения, прикрепленные ко всем объявлениям и категориям объявлений
$this->diafan->_images->delete_module('ab');

mixed upload (integer $element_id, string $module_name, string $element_type, integer $site_id, string $tmpfile, string $new_name, [boolean $handle = false], [integer $param_id = 0], [string $tmpcode = '']) – Загружает прикрепленные изображения.

  • integer $element_id: номер элемента, к которому прикреплены изображения
  • string $module_name: название модуля
  • string $element_type: тип данных (element – элемент (по умолчанию), cat – категория, brand – производитель)
  • integer $site_id: страница сайта
  • string $tmpfile: расположение файла
  • string $new_name: название файла без расширения
  • boolean $handle: ручная загрузка изображений по одной
  • integer $param_id: номер дополнительной характеристики с типом «Изображения»
  • string $tmpcode: временный код для прикрепления изображений к еще не созданному элементу

Пример:

try
{
    
// загружаем изображение для производителя ID=5 в магазине, подключенном к старинице ID=3
    
$this->diafan->_images->upload(5, 'shop', 'brand', 3, $_FILES["images"], 'proizvoditel_oop');
}
catch(
Exception $e)
{
    
// сообщение об ошибки при загрузке
    
echo $e->getMessage();
}

void get_variation_image (string $file_name, string $module_name, array $variation, integer $folder_num, [boolean $handle = false], [boolean $after_selectarea = false]) – Применяет вариант к изображению.

  • string $file_name: название файла
  • string $module_name: название модуля
  • array $variation: данные о варианте
  • integer $folder_num: номер папки
  • boolean $handle: ручная обработка (для вырезания части изображения)
  • boolean $after_selectarea: обработка после ручного выделения области

Пример:

// получаем данные о варианте изображения, который нужно применить к изображению
$variation = DB::query_fetch_array("SELECT * FROM {images_variations} WHERE id=5");

// генерируем копию изображения в полученном размере
$this->diafan->_images->get_variation_image("izobrazhenie_tovara.jpg", "shop", $variation, 0);

integer id_hash (string $hash) – Определяет номер записи, которой соответствует хэш.

  • string $hash: хэш

Как добавить прикрепленные изображения к модулю

В настройках модуля (modules/модуль/admin/модуль.admin.config.php) и в файле редактирования элементов модуля (modules/модуль/admin/модуль.admin.php) необходимо добавить параметр 'images':

Пример:

public $variables = array(
    
'main' => array(
        
'images' => 'module',
        

    
),
    

);

Размеры изображений

Список размеров изображений

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

Редактирование размера изображений

Варианты изображений имеют следующие свойства:

Настройки

Настройки изображений задаются в настройках модуля, к которому прикрепляются изображения. Необходимо определить следующие параметры работы модуля:

Использовать изображения – позволяет включить/отключить загрузку изображений.

Генерировать размеры изображений – размеры изображений, заданные в модуле «Изображения» и тег латинскими буквами для подключения изображения на сайте. Обязательно должны быть заданы два размера: превью изображения в списке (тег medium) и полное изображение (тег large). Параметр выводится, если отмечена опция «Использовать изображения».

Отображение изображений в списке – параметр принимает значения:

  • нет (отключает отображение изображений в списке);
  • показывать одно изображение;
  • показывать все изображения.

Использовать изображения для категорий – позволяет включить/отключить загрузку изображений к категориям.

Генерировать размеры изображений для категорий – размеры изображений, заданные в модуле «Изображения» и тег латинскими буквами для подключения изображения на сайте. Обязательно должны быть заданы два размера: превью изображения в списке категорий (тег medium) и полное изображение (тег large). Параметр выводится, если отмечена опция «Использовать изображения для категорий».

Отображение изображений в списке категорий – параметр принимает значения:

  • нет (отключает отображение изображений в списке);
  • показывать одно изображение;
  • показывать все изображения.

Применить настройки ко всем ранее загруженным изображениям – позволяет переконвертировать размер уже загруженных изображений. Кнопка необходима, если изменены настройки размеров изображений. Параметр выводится, если отмечена опция «Использовать изображения».

Использовать анимацию при увеличении изображений – параметр добавляет JavaScript код, позволяющий включить анимацию при увеличении изображений. Параметр выводится, если отмечена опция «Использовать изображения».

Максимальный размер загружаемых файлов – параметр показывает максимально допустимый размер загружаемых файлов, установленный в настройках хостинга. Параметр выводится, если отмечена опция «Использовать изображения».

База данных

{images} – Прикрепленные изображения

{images_editor_folders} – Папки изображений в плагине для визуального редактора

{images_variations} – Варианты загрузки изображений

Файлы

  1. modules/images/admin/images.admin.php – редактирование вариантов генерирования изображений;

  2. modules/images/admin/images.admin.action.php – обработка POST-запросов при работе с изображениями в административной части;

  3. modules/images/admin/images.admin.config.php – настройки модуля;

  4. modules/images/admin/images.admin.inc.php – подключение модуля к административной части других модулей;

  5. modules/images/admin/images.admin.view.php – шаблон вывода изображений в административной части;

  6. modules/images/admin/js/images.admin.config.js – настройки модуля, JS-сценарий;

  7. modules/images/admin/js/images.admin.inc.config.js – подключение модуля к настройкам других модулей, JS-сценарий;

  8. modules/images/admin/js/images.admin.inc.js – подключение модуля к административной части других модулей, JS-сценарий;

  9. modules/images/admin/js/images.admin.js – редактирование вариантов генерирования изображений, JS-сценарий;

  10. modules/images/images.editor.php – плагин для визуального редактора;

  11. modules/images/images.editor.css – плагин для визуального редактора, CSS;

  12. modules/images/images.inc.php – подключение для работы с прикрепленными изображениями;

  13. modules/images/images.install.php – установка модуля;

  14. modules/images/js/images.editor.js – плагин для визуального редактора, JS-сценарий.

Ваши комментарии и дополнения
31 января 2016 г.
У вас нигде не указано что что - бы добавить изображения к модулю надо не только их прописать в admin/example.admin.php и example.admin.config.php
но и в самой админке нужно навести порядок по адресу
/example/config/
Иначе изображения нельзя будет добавлять
=====================================================
Ещё вопрос можно как то сделать чтобы можно было добавлять только одно изображение к статье?
01 февраля 2016 г.
Чтобы загружать можно было только одно изображение, нужно добавить в example.admin.php:
Код
'images' => array(
'type' => 'module',
...
'count' => 1,
),

Как в модуле "Фотогалерея"
02 марта 2021 г. , редакция: 02 марта 2021 г.
Прописали в admin/bs.admin.php и bs.admin.config.php и в самой админке /bs/config/
Но соответствующие папки и сами фото не создаются при загрузке изображения через админку (обработка изображений для баннеров). Из-за чего может быть?
02 марта 2021 г.
Факт прописки адреса загрузки изображений в конфиге не приведет к созданию папки. Модуль лишь будет пытаться туда загрузить. Но сама папка создаётся либо в install модуля при его установке, либо вручную.
21 октября 2022 г.
Спасибо комментариям, стало понятно что добавления нижеследующего кода, мало:

Код
public $variables = array(
'main' => array(
'images' => 'module',

),

);


Пробовал добавить в admin/example.admin.php и example.admin.config.php, (точнее они там уже были т.к. это магазин), но это не помогло вывести загрузку images.

Можно ли получить более подробную инструкцию, типа:
1. сюда добавить такой-то код.
2. сюда добавить сякой-то код.
3. вот здесь создать такую-то директорию.
4. вот там-то прописать вот такой-то конфиг.
5. тут указать вот такую ссылку.
6. а вот здесь, закомментировать вот такую-то подсказку.
7. в базе сделать вот такую-то колонку.

и тогда, точнее только тогда, появится модуль загрузки изображений (при этом текстовые и т.п. поля подключаются без дополнительных хитрых манипуляций). Проблема я так понимаю именно в сложности подключения модуля. Как получить подробную инструкцию?
13 февраля
Подскажите, как можно добавлять дополнительные поля изображений?
Например стандартный служит для фото товаров. А дополнительное поле, за фоновое изображение страницы, а третье доп поле, допустим за какойнибудь специфический вывод. Что бы фотки не к одному полю все грузились, а была возможность как-то кастомизировать работу..
13 февраля
Цитата
Подскажите, как можно добавлять дополнительные поля изображений?
Например стандартный служит для фото товаров. А дополнительное поле, за фоновое изображение страницы, а третье доп поле, допустим за какойнибудь специфический вывод.

Такие задачи нужно решать не модулем изображений, а в рамках любого другого модуля, к которому изображения подключаются.
При подключении изображений создаются варианты
Код
public $variables = array(
'image1' => array(
'images' => 'module',

),
'image2' => array(
'images' => 'module',

),
'image3' => array(
'images' => 'module',

),

);
и далее они уже оформляются как нужно
14 февраля , редакция: 14 февраля
Виталий, действительно форма отправки фото добавилась на странице. Но пробелма осталась. Заливая фотку в любую форму, она видна во всех остальных.
https://disk.yandex.ru/i/EB9Pxz5BI2G36g
Те когда буду выводить фотки на странице, у меня опять будет весь список, который прикреплен к странице.
А мне по факту хочется получать доступ именно к фотке которая подгружена в конкретное поле.

Те нужно что-то на подобии этого https://www.diafan.ru/dokument/full-manual/examples/new-field/

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.