Прикрепление изображения к комментариям Tickets (TicketComments)

Прикрепление изображения к комментариям Tickets (TicketComments)

Всем привет. Понадобилось мне тут на днях сделать отзывы на сайте под Modx Revolution. Сделать решил на Tickets, а если конкретнее то на TicketComments - системе комментариования тикетов. И в каждом отзыве я планировал прикреплять изображение, а вот как это сделать - не знал. Теперь знаю, хочу это записать себе на будущее и поделиться с вами. Итак, чтобы прикрепить изображение к комментарию TicketComments, нужно:

1. Добавляем в чанке с формой TicketComments к <form> enctype="multipart/form-data", чтобы получилось

<form id="comment-form" action="" method="post" enctype="multipart/form-data">

2. Здесь же, ниже textarea вставляем

<input type="file" name="image">

3. Создаём плагин

<?php
switch ($modx->event->name) {
case 'OnBeforeCommentSave':

// Выбираем расширенное поле properties
$properties = $modx->event->params['TicketComment']->get('properties');

if(!empty($_FILES['image'])){

// Вначале загружаем файл на сервер в папку assets/images/reviews/
$uploaddir = MODX_BASE_PATH.'assets/images/reviews/';
$uploadfile = $uploaddir . basename($_FILES['image']['name']);

if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) {

$src = $uploadfile; // Исходник
$hash = hash_file('md5', $src); // хэш файла (для генерации имени превьюшки)
$dst = MODX_BASE_PATH.'assets/images/reviews/'.$hash._.time().'.jpg'; // Уменьшенная копия (название из хэша и текущей отметки времени)

$params = array(
'w' => 100 , // Ширина
'h' => 120, // Высота
'bg' => 'ffffff', // Фон
'q' => 100, // Качество в %
'zc' => 'C', // Обрезка, TL - это Top Left, есть еще C - center, BR - Bootom Right и т.д.
'f' => 'jpg', // Формат изображения
);

// Подключаем обёртку MODX, которая выставит системные настройки в класс phpThumb
$phpThumb = $modx->getService('modphpthumb','modPhpThumb', MODX_CORE_PATH . 'model/phpthumb/', array());

// Указываем исходник
$phpThumb->setSourceFilename($src);

// Выставляем параметры
foreach ($params as $k => $v) {
$phpThumb->setParameter($k, $v);
}

// Генерируем уменьшенную копию
if ($phpThumb->GenerateThumbnail()) {
// Выводим готовое изображение сразу на экран
//return $phpThumb->OutputThumbnail();

// Или сохраняем в файл
if (!$phpThumb->renderToFile($dst)) {
$modx->log(modX::LOG_LEVEL_ERROR, 'Could not save rendered image to'.$dst);
} else {
// сохраняем путь превьюшки в расширенное поле
$properties['image'] = str_replace(MODX_BASE_PATH,'',$dst);

// удаляем оригинал
unlink($src);
}

}
else {
// Если возникла ошибка - пишем лог работы в журнал MODX
$modx->log(modX::LOG_LEVEL_ERROR, "ОШИБКА генерации превьюшки: ".print_r($phpThumb->debugmessages, 1));
}


}
else {$modx->log(modX::LOG_LEVEL_ERROR, "Возможная атака с помощью файловой загрузки!\n" );}

};


// Сохранение
if(!empty($properties)) {
$modx->event->params['TicketComment']->set('properties', $properties);
}

break;
}

тут можно настроить обрезку изображений, качество и формат. Всё это делает встроенный в Modx phpThumb

4. Создаем папку для загрузки изображений

Создаём путь и папку assets/images/reviews/куда будут загружаться изображения пользователей

5. Вставляем в чанк с комментарием (включите fenom)

<img src="{if $properties.image}{$properties.image}{else}assets/images/user.png{/if}" alt="" align="left" />

Готово. Теперь мы можем прикреплять изображения к отзывам (или комментариям), сделанным на Tickets. Всего доброго и интересных проектов. Пока!

Помогла статья? Угости чашечкой кофе =)

Если вы не видите кнопку "Скачать"
отключите блокировщик рекламы

Комментарии ()

    Похожие статьи