Перейти к публикации

Вывод в шаблоне картинки произвольного размера


Рекомендованные сообщения

Как мы знаем, в DLE есть возможность формировать два типа уменьшенных картинок, это thumbs и medium. При этом, только в самой новости можно указать какой размер картинки будет использоваться. Хорошо? Наверное да. Но как быть, если в шаблоне используется много картинок различного размера, а публикации выводятся через custom. Несколько 450х250, несколько 200х110, а несколько 100х100? Правильно, вставлять во все новости и выводить везде 450х250 и применять CSS и/или JS. Отображаться то будет нормально, но вот вес страницы становится очень большой.

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

Я же предлагаю, непосредственно в шаблоне указывать какой размер выводить. При этом размер картинки заданный в самой публикации игнорируется!

Например:

[imagecustom-1]<img src="{image_thumbs-1}">[/imagecustom-1]
- выведет первую картинку размером thumbs
[imagecustom-1]<img src="{image_medium-1}">[/imagecustom-1][/code]
 - выведет первую картинку размером [b]medium[/b]

[code][imagecustom-2]<img src="{image_medium-2}">[/imagecustom-2][/code]
- выведет вторую картинку размером [b]medium[/b] При этом, можно указывать не только {image_thumbs-1}, но и {image_450х250-1}, при этом картинка будет выводиться из папки: ../uploads/posts/../450х250/картинка. Каким образом появятся уменьшенные картинки в папке "450х250" ? Это будет отдельная тема :) Сейчас есть наброски в написании скрипта перестроения картинок, например при переходе с одного шаблона другой нужно делать уменьшенные копии другого (большего или меньшего) размера. http://forum.dle-new...showtopic=67574 А вообще хочу сделать, что бы любые предварительно заданные уменьшенные копии формировались автоматом при загрузке картинок. Вот, собственно и сам код изменения:
[code] if (stripos ( $tpl->copy_template, "{image_" ) !== false) { preg_match_all('#\{image_(.*)\-#isU', $tpl->copy_template, $tTyp); $arrType = array_unique($tTyp[1]); //Удалим дубли sort($arrType); //Очистим от пустот появившихся после убирания дублей $countType = count($arrType); //Кол-во разных типов $images = array(); preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $row['short_story'], $media); $data=preg_replace('/(img|src)("|\'|="|=\')(.*)/i',"$3",$media[0]); foreach($data as $url) { $info = pathinfo($url); if (isset($info['extension'])) { if ($info['filename'] == "spoiler-plus" OR $info['filename'] == "spoiler-plus" ) continue; $info['extension'] = strtolower($info['extension']); if (($info['extension'] == 'jpg') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png')) array_push($images, $url); } } if ( count($images) ) { $i_count=0; foreach($images as $url) { $i_count++; //Очистим УРЛ от стандартных thumbs и medium $url = str_replace( 'thumbs', "", $url ); $url = str_replace( 'medium', "", $url ); $arrURL = explode('/',$url); //Позиция, куда вставляем наш тип картинки $inputPoz = count($arrURL)-1; $n = 0; while ($n <= $countType) { $templ = $arrType[$n]; $tmparrURL = $arrURL; array_splice($tmparrURL, $inputPoz, 0, $templ); //Добавляем путь к нашей уменьшенной картинке $url = implode('/',$tmparrURL); $tpl->copy_template = str_replace( '{image_'.$templ.'-'.$i_count.'}', $url, $tpl->copy_template ); $n++; } $tpl->copy_template = str_replace( '[imagecustom-'.$i_count.']', "", $tpl->copy_template ); $tpl->copy_template = str_replace( '[/imagecustom-'.$i_count.']', "", $tpl->copy_template ); } } $tpl->copy_template = preg_replace( "#\[imagecustom-(.+?)\](.+?)\[/imagecustom-(.+?)\]#is", "", $tpl->copy_template ); $n = 0; while ($n <= $countType) { $templ = $arrType[$n]; $tpl->copy_template = preg_replace( "#\\{image_".$templ."-(.+?)\\}#i", "{THEME}/dleimages/no_image.jpg", $tpl->copy_template ); $n++; } } [/code]
Данный код необходимо вставить в [b]show.custom.php[/b] после условия:
[code] if (stripos ( $tpl->copy_template, "{image-" ) !== false) { .... } [/code]

Можно вставить и в [b]show.short.php[/b]

Изменено пользователем IgorA100
Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

Итак, реализован загрузчик кастомных изображений.

Возможности:

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

2. Для каждой уменьшаемой копии возможно задавать размер и варианты уменьшения.

3. Все настраивается в админке.

Изменения коснулись 2х файлов engineajaxupload.php и engineclassesuploadsupload.class.php Дабы не описывать вносимые изменения, в ариве выложены оригинальные файлы от 10.4 версии с изменениями.

Админка: engineincacimage.php

Установка: фалы из архива залить на свой сервер. Если Вами ранее были изменены файлы engineajaxupload.php и engineclassesuploadsupload.class.php, то свои изменения нужно внести и в файлы из архива.

Перейти по ссылке: Ваш_сайт/путь_к_админ_файлу/?mod=acimage, после чего в админке, в разделе сторонних модулей появится и данный модуль.

После настройки в загрузчике появятся дополнительные варианты уменьшения изображений. После загрузки оригинального изображения будут наглядно видны и все обрезанные варианты, что позволяет наглядно оценить вставляемое изображение. Новые уменьшенные копии можно вставлять в свои публикации. Следует заметить, что вставляется полноценная картинка уменьшенной копии, без использования тега [thumbs, а следовательно и не будет работать стандартная ф-ция увеличения изображений. Для того, что бы такое увеличение работало по клику на уменьшенное изображение необходимо добавить в конец шаблона main.tpl следующую конструкцию:


<script>

$(document).ready(function(){

$('img.img_custom').each(function() {

   src = $(this).attr("src").split('/');

   src.splice(src.length-2,1);

   $(this).wrap("<a class='highslide' rel='highslide' href='"+src.join('/')+"'></a>");

});

});

</script>

Т.к. не получается к сообщению прикрепить файл, то разместил его тут: http://www.kentavr.c...stom_resize.zip

ЗЫ: Сам ресайз происходит с использованием тулкита: http://true-coder.ru...nij-na-php.html Правда, файл AcImage.php был немного мной поправлен на предмет обработки прозрачных GIF

ЗЫЗЫ: Папки enginemodulesAcImage-masterdemo и enginemodulesAcImage-masterdoc из архива не нужны для работы тулкита, их на сайт заливать не следует!

Принимаются замечания и комментарии.

Изменено пользователем IgorA100
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...