Наверх

Изображения

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

Подключение

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

Пример:

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

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

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);

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, sting $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: страница сайта
  • sting $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);

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

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

Пример:

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

    
),
    

);

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

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

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

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

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

Основные:

  • Название – Название метода обработки изображений. Используется во всех модулях, где подключены изображения.
  • Папка – Название папки латинскими буквами без пробелов, куда будут загружаться обработанные изображения Для каждого модуля папка формируется отдельно.

    Пример:

    Создаем размер «Большой», папка big. В настройках модуля «Магазин» задаем этот вариант для полного изображения (тег large). Тогда увеличенное изображение товара будет сохраняться в папке userfiles/shop/big.
  • Качество – Качество сжатия файлов в формате JPEG (0 – минимальное, 100 – максимальное, 60-90 – рекомендуемое).
  • Метод обработки – Набор действий, осуществляемых с изображением для формирование варианта изображения. Можно задать несколько действий. Действия выполняются в заданной последовательности.

    Можно определить следующие действия:

    • изменить пропорционально – пропорциональное уменьшение изображения. Если не отмечена опция «Уменьшение по меньшей стороне», то за основу берется минимальная пропорция, иначе максимальная;

    Пример:

    Необходимо, чтобы все изображения на сайте были одинакового размера: 300 на 100 пикселей. Нужно сначала пропорционально уменьшить изображение, затем обрезать по размеру 300х100. В этом случае следует отметить опцию «Уменьшение по меньшей стороне», чтобы уменьшенное изображение было больше пропорции 300х100.

    Необходимо, чтобы все изображения были одной высоты – 100 пикселей. Нужно применить действие «изменить пропорционально», не отмечая опцию «Уменьшение по меньшей стороне», размеры: 1000х100. Тогда минимальной пропорцией всегда будет пропорция по высоте.

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

Настройки

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

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

Генерировать размеры изображений – размеры изображений, заданные в модуле «Изображения» и тег латинскими буквами для подключения изображения на сайте. Обязательно должны быть заданы два размера: превью изображения в списке (тег 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.inc.php – подключение модуля к административной части других модулей;

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

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

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

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

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

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

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

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

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

Ваши комментарии и дополнения

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

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