Всем привет!
Давно ничего не писал, как обычно нет на все времени.
Предлагаю вашему вниманию функцию поворот фото на 90 градусов для стандартного компонента Фотоальбомы.
Компонент Фотоальбомы очень слабый по сравнению с остальным функционалом второй ветки и данной функции поворота очень не хватает.
Для себя решил следующим способом, буду рад любым подсказкам и правкам, также, очень надеюсь, что переработанное решение войдет в следующее обновление InstantCMS 2.x
1. Добавляем кнопку переворота:
файл /templates/default/controllers/photos/view.tpl.php строки:
заменить на:
также в самом низу в <script> после строки:
добавляем:
2. Добавляем вызов функции поворота из JS
файл /templates/default/js/photos.js
после функции:
добавляем новую функцию:
3. Создаем action функции переворота.
в директории /system/controllers/photos/actions создаем файл с названием rotate.php со следующим содержимым.
4. Добавляем саму функцию поворота в модель
в файле /system/controllers/photos/model.php после функции:
пишем новую функцию:
5. Добавляем языковую константу
в файл /system/languages/ru/controllers/photos/photos.php (и/или в другой язык)
добавляем:
P.S.
Этот пункт не обязателен, но мне показался крайне необходимым из-за того, что после поворота картинка показывается старая (не перевернутая из кэша).
Можно вопрос решить с переименованием файла после поворота, но мне это решение показалось более простым и универсальным.
В файле /system/libs/template.helper.php
в функции:
меняем возвращение результата вместо:
прописываем:
P.S.S. Функция переворота работает с jpg, png, gif, но сохраняет все в формат jpg без переименования файла. Сохранить в исходном формате не получилось, появлялись ошибки, а исправлять было некогда. Пишите свои решения.
Жду тестов остальных участников сообщества, здравой критики и комментариев разработчиков.
Удачных выходных!
Давно ничего не писал, как обычно нет на все времени.
Предлагаю вашему вниманию функцию поворот фото на 90 градусов для стандартного компонента Фотоальбомы.
Компонент Фотоальбомы очень слабый по сравнению с остальным функционалом второй ветки и данной функции поворота очень не хватает.
Для себя решил следующим способом, буду рад любым подсказкам и правкам, также, очень надеюсь, что переработанное решение войдет в следующее обновление InstantCMS 2.x
1. Добавляем кнопку переворота:
файл /templates/default/controllers/photos/view.tpl.php строки:
if ($is_can_edit){ 'class' => 'edit', 'title' => LANG_PHOTOS_RENAME_PHOTO, 'href' => 'javascript:icms.photos.rename()' )); }
if ($is_can_edit){ 'class' => 'edit', 'title' => LANG_PHOTOS_RENAME_PHOTO, 'href' => 'javascript:icms.photos.rename()' )); 'class' => 'edit', 'title' => LANG_PHOTOS_ROTATE_PHOTO, 'href' => 'javascript:icms.photos.rotate()' )); }
var rename_url = '<?php echo $this->href_to('rename'); ?>';
var rotate_url = '<?php echo $this->href_to('rotate'); ?>';
файл /templates/default/js/photos.js
после функции:
... }
this.rotate = function(){ var id = $('#album-photo-item').data('id'); $.post(rotate_url, {id: id}, function(result){ if (result.success){ window.location.href=''; } }, 'json'); }
в директории /system/controllers/photos/actions создаем файл с названием rotate.php со следующим содержимым.
<?php class actionPhotosRotate extends cmsAction{ public function run($photo_id = null){ if (!$this->request->isAjax()) { cmsCore::error404(); } if (!$photo_id) { $photo_id = $this->request->get('id'); if (!$photo_id) { cmsCore::error404(); } } $photo = $this->model->getPhoto($photo_id); $success = true; // проверяем наличие доступа $user = cmsUser::getInstance(); if (!cmsUser::isAllowed('albums', 'edit')) { $success = false; } if (!cmsUser::isAllowed('albums', 'edit', 'all') && $photo['user_id'] != $user->id) { $success = false; } if (!$success){ 'success' => false )); } $this->model->rotatePhoto($photo_id); 'success' => true )); } }
в файле /system/controllers/photos/model.php после функции:
public function renamePhoto($id, $title){ ... }
public function rotatePhoto($id){ $photo = $this->getPhoto($id); $config = cmsConfig::getInstance(); foreach($photo['image'] as $path){ // получаем данные о картинке //определяем тип (расширение) картинки $icfunc = "imagecreatefrom" . $format; //определение функции для расширения файла //если нет такой функции, то прекращаем работу скрипта // Загрузка изображения $source = $icfunc($config->upload_path . $path); // Поворот. Пустые углы заливаем цветом 0xffffff // сохраняем картинку // очищаем память } } }
в файл /system/languages/ru/controllers/photos/photos.php (и/или в другой язык)
добавляем:
Этот пункт не обязателен, но мне показался крайне необходимым из-за того, что после поворота картинка показывается старая (не перевернутая из кэша).
Можно вопрос решить с переименованием файла после поворота, но мне это решение показалось более простым и универсальным.
В файле /system/libs/template.helper.php
в функции:
... }
return '<img src="'.$src.'?'.filemtime(PATH.$src).'" '.$size.' alt="'.htmlspecialchars($alt).'" '.$attr_str.$class.' />';
Жду тестов остальных участников сообщества, здравой критики и комментариев разработчиков.
Удачных выходных!
Реклама #
Def 8 лет назад #
Def 8 лет назад #
Шадринец 5 лет назад #
Видимо не нашлось желающих по тестировать и поправить данное предложение.
Может кто пользуется другим компонентом или дополнением? Для переворота фото.