Главная » PHP » TVimageResizer plugin
Куда Вы попали?

Информационная связь с потребителем, безусловно, реально стабилизирует социометрический рейтинг, не считаясь с затратами. Стиль менеджмента стабилизирует конвергентный анализ зарубежного опыта, оптимизируя бюджеты. Емкость рынка вырождена. Стратегический маркетинг, не меняя концепции, изложенной выше, основан на тщательном анализе данных.
А если серьёзно, это просто блог.

Нужен сайт?

Тогда, возможно, Вы попали туда куда нужно.
Я занимаюсь созданием сайтов "под ключ".
Оцените качество работы, посмотрев
портфолио. Если Вы не рассчитываете на демпинг, связаться со мной можно при помощи формы обратной связи.



Для "спасибо"
Установите Flash-плеер

Авторизация

Есть что сказать?


TVimageResizer plugin

Для MODx уже создано не мало плагинов, которые изменяют размеры картинок. Самым удобным и универсальным я могу назвать DirectResize. Этот и подобные ему плагины парсят HTML-код, проверяют размеры картинок и если нужно "ресайзят" их. Всё очень удобно и просто. Но когда картинок на странице очень много (например каталог товаров), то естественно время генерации страницы и нагрузка на сервер существенно возрастают. Также из-за такого плагина нагрузка может быть значительной при большой посещаемости ресурса.

На днях у меня появилась задача вставлять маленькие картинки без их последующего увеличения. Такие картинки обычно вставляют в анонс новостей или в каталоге продукции. В моем случае эта картинка должна была служить ссылкой на страницу с подробным описанием где уже вставляется картинка побольше. Ресурсов сервера на такую простую задачу и времени на ресайз "вручную" стало очень жалко и я создал плагин TVimageResizer.

С помощью этого плагина создание уменьшенных копий картинок существенно облегчается. Для прикрепления фото к материалу я использую параметр (TV). Нужно только загрузить фотографию любого размера и задать нужные размеры для уменьшенной копии. Можно задать размеры, которые будут использоваться по умолчанию.

TVimageResizer

TVimageResizer

Для установки нужно создать плагин с именем TVimageResizer и вставить код. В поле "Конфигурация" нужно вставить такую строку:

&th_width=Max.width;int;150 &th_height=Max.height;int;110 &prefix=prefix;int;_t

Далее отметить системные события OnDocFormRender и OnBeforeDocFormSave.

Код плагина:

//<?php
 
//***********************************
//TVimageResizer plugin v1.2
//Andchir  http://wdevblog.net.ru
//***********************************
// Description: Resizing images of Template Variables
// Configuration: &th_width=Max.width;int;150 &th_height=Max.height;int;110 &prefix=prefix;int;_t
// System Events: OnDocFormRender, OnBeforeDocFormSave
//***********************************
 
if(!isset($prefix)) $prefix="_t";
if(!isset($th_width)) $th_width=150;
if(!isset($th_height)) $th_height=110;
 
global $content;
global $tmplvars;
 
$doc_id = $content['id'];
$template = $content['template'];
$fullpath = $modx->config['base_path'];
define(IMAGE_CLASS,"GD");
$e = &$modx->Event;
$output = "";
 
$tb_tmplvars = $modx->getFullTableName('site_tmplvars');
$tb_tmplvar_values = $modx->getFullTableName('site_tmplvar_contentvalues');
 
require_once('./media/ImageEditor/Classes/Thumbnail.php');
 
if ($e->name == 'OnDocFormRender') {
 
$result = $modx->db->select('id,name', $tb_tmplvars, "type='image'");
$tvs = '';
 
while ($row = $modx->db->getRow($result))
  $tvs .= ",'" . $row['name'] . "'";
  
$tvs = substr($tvs, 1);
 
$output = <<< EOT
 
<!-- TVimageResizer -->
<script type="text/javascript">
 
var imageNames = [$tvs];
 
window.onDomReady(function() {
    for (var i = 0; i < imageNames.length; i++) {
      var elem = $('tv' + imageNames[i])
      if (elem) {
        var field1 = new Element('input',{type:'checkbox', name:'rsz[]', id:'rsz'+(i+1), value:imageNames[i]});
        var label = new Element('label',{for:'rsz'+(i+1)});
        var field2 = new Element('input',{type:'text', size:'5', name:'rszwidth[]', value:$th_width});
        var field3 = new Element('input',{type:'text', size:'5', name:'rszheight[]', value:$th_height});
        elem.getParent().adopt(field1).adopt(label.appendText('resize')).adopt(field2).appendText('x','after').adopt(field3);
      }
  }
});
 
</script>
<!-- /TVimageResizer -->
 
EOT;
 
$e->output($output);
 
}
 
if ($e->name == 'OnBeforeDocFormSave') {
  
  if(isset($_POST['rsz'])){
    echo $override_tv;
    foreach ($_POST['rsz'] as $k=>$v) {
      if(!empty($_POST['tv'.$v])){
        $s_value = $_POST['tv'.$v];
        $ext = substr($s_value, strpos($s_value, ".")+1, strlen($s_value));
        
        if(!strstr($s_value, $prefix.".".$ext) && !empty($s_value)){
          $new_value = str_replace('.jpg',$prefix.'.jpg',$s_value);
          
          if(file_exists("../$new_value")) unlink("../$new_value");
      
          $th_width = $_POST['rszwidth'][$k] ? $_POST['rszwidth'][$k] : $th_width;
          $th_height = $_POST['rszheight'][$k] ? $_POST['rszheight'][$k] : $th_height;
          
          $thumbnailer = new Thumbnail($th_width,$th_height);
          $thumbnailer->createThumbnail($fullpath.$s_value, $fullpath.$new_value);
          
          $tmplvars[$v][1] = $new_value;
        }
      }
    }
  }
}
 
//?> 
Внимание! Доступна версия 1.5. Скачать TVimageResizer 1.5

Написать комментарий

  • Обязательные для заполнения поля помечены знаком *.
Код подтверждения:


Комментарии с 1 по 4 из 12 | Следующие | В конец
MIke
Ответов: 7
Комментарий
Re: TVimageResizer plugin
Ответ #12 дата : Mon November 09, 2009, 23:26:28
U menja poluchilosj tak, chto polja vvoda prefixa i velichin, raspologajutsja na odnom urovne s polem vvoda... pri zagruzke kartinki nichego s poljami ne proishodit.
Mike
Ответов: 7
Комментарий
Re: TVimageResizer plugin
Ответ #11 дата : Mon November 09, 2009, 23:15:32
Ne poluchilosj ((( Prosto ne rabotajet. ZHalj.
ArtemRu
Ответов: 7
Комментарий
чуточку доработал
Ответ #10 дата : Fri August 14, 2009, 08:14:05
Спасиб за простой плагин, благодаря ему разобрался во многом :). И чуток доработал под свои нуждый:
- добавил кроме префикса - возможность добавления суфикса.
- в настройках плагина можно регулировать позицию и прозрачность водяного знака, размер шрифта копирайт.
- на форме редактирования документа теперь отображаются реальные размеры (высота, ширина) изображения.
- если указать размеры 0 или удалить данные - то размер изображения не меняется.
- на форме редактирования документов теперь 3 галочки: 1) изменить размеры исходного изображения, тоесть заменяется оригинал; 2) создать копию исходного файла, тоесть изменяются размер и создается новый файл с указанным суфиксом и префиксом; 3) добавить к изменяемому изображению водиные знаки и копирайт, работает совместно с верхними.
- на форме редактирования документа возможно выбрать файл для водяного знака - через менеджер файлов. Можно изменить/удалить текст копирайт.
- водяные знаки накладываются на изображения после изменения его размеров, а не до, как было.

в нагрузку сделал снипет для изменения имени файла - добавления суфикса и префикса. Использую при выводе содержимого каталога - беру tv параметр добавляю нужный суфикс для отображения маленькой картинки и усе. :)
Andchir
Ответов: 5
Комментарий
2Юрий:
Ответ #9 дата : Thu July 16, 2009, 09:12:33
С Image TV Preview не конфликтует. Ещё раз проверил на 1.0RC1 и 0.9.6.3. Работает. Код плагина точно берете из файла TVimageResizer_plugin_1.5.txt?
Последняя правка: August 01, 2009, 19:58:59 пользователем Andchir  
Комментарии с 1 по 4 из 12 | Следующие | В конец