Как не создавать миниатюры для маленьких изображений — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
Создадим свой собственный custom-ный макрос (подробнее о создании макроса [[%D0%92%D1%8B%D0%B7%D0%BE%D0%B2_%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D0%B0_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_custom.php]])
+
Актуально для 2.9.6 (c TPL-шаблонизатором)
 +
 
 +
----
 +
'''Задача:''' Создавать миниатюры только для тех исходных изображений, чей размер по высоте или ширине превышает значение передаваемого в дополнительном параметре.
 +
 
 +
'''Решение:'''
 +
Кастомизируем стандартный макрос передав в него дополнительный параметр. Если ширина или высота исходного изображения будет меньше максимально заданного, то из такого изображения мы не создаем миниатюру, иначе отправляем данные на макрос %system makeThumbnail()% для создания миниатюры.<br/>
 +
Создадим свой собственный custom-ный макрос (подробнее о создании макроса  
 +
[[%D0%92%D1%8B%D0%B7%D0%BE%D0%B2_%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D0%B0_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_custom.php]])
  
 
Код будет следующий:
 
Код будет следующий:
 
<source lang="php">
 
<source lang="php">
public function my_thumbnail($path, $width, $hight, $template, $max, $min) {
+
//TODO: Write your own macroses here
if ($width>$hight){
+
public function my_thumbnail($path, $width, $hight, $template, $max) {
if($max>$width) {
+
if ($width>$hight){
$my_thumbnail = "<img src=".$path." width=".$width." height=".$hight."";
+
if($max>$width) {
}
+
$my_thumbnail = "<img src=".$path." width=".$width." height=".$hight."";
else{
+
} else {
$my_thumbnail = "%system makeThumbnail('.".$path."', '".$max."', 'auto', '".$template."')%";
+
$my_thumbnail = "%system makeThumbnail('.".$path."', '".$max."', 'auto', '".$template."')%";
}
+
}
 +
} else {
 +
if($max>$hight){
 +
$my_thumbnail = "<img src=".$path." width=".$width." height=".$hight."";
 +
} else {
 +
$my_thumbnail = "%system makeThumbnail(.".$path.", auto, ".$max.", ".$template.")%";
 +
}
 +
}
 +
return $my_thumbnail;
 
}
 
}
else {
 
if($max>$hight){
 
$my_thumbnail = "<img src=".$path." width=".$width." height=".$hight."";
 
}
 
else
 
{
 
$my_thumbnail = "%system makeThumbnail(.".$path.", auto, ".$max.", ".$template.")%";
 
}
 
}
 
return $my_thumbnail;
 
}
 
 
</source>
 
</source>
  
Строка 28: Строка 33:
 
Для использования его в tpl-шаблонах сделаем следующее:  
 
Для использования его в tpl-шаблонах сделаем следующее:  
  
В вызове шаблона в папке tpls/data/ указываем:
+
В вызове шаблона в папке tpls/data/ваш_шаблон.tpl указываем:
  
 
<source lang="php">
 
<source lang="php">
 
$FORMS['img_file'] = <<<END
 
$FORMS['img_file'] = <<<END
%custom my_thumbnail(%src%, %width%, %height%, имя_шаблона_для_вывода, 100, 100)%
+
%custom my_thumbnail(%src%, %width%, %height%, имя_шаблона_для_вывода, 100)%
 
END;
 
END;
 
</source>
 
</source>
Строка 39: Строка 44:
  
  
Шаблон для вывода может быть таким:
+
Шаблон для вывода (находится в папке /templates/название_шаблона/tpls/thumbs) может быть таким:
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
Строка 54: Строка 59:
  
  
То есть он подставит только начало кода для изображения, а окончание "некторый код />" будет указано в шаблоне, где будет выводится изображение.
+
То есть он подставит только начало кода для изображения, а окончание "некоторый код />" будет указано в шаблоне, где будет выводится изображение.
 +
 
 +
[[Категория:Модуль Фотогалереи]][[Категория:Написание кастомных макросов]]

Версия 14:33, 10 апреля 2014

Актуально для 2.9.6 (c TPL-шаблонизатором)


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

Решение: Кастомизируем стандартный макрос передав в него дополнительный параметр. Если ширина или высота исходного изображения будет меньше максимально заданного, то из такого изображения мы не создаем миниатюру, иначе отправляем данные на макрос %system makeThumbnail()% для создания миниатюры.
Создадим свой собственный custom-ный макрос (подробнее о создании макроса Вызов_макроса_через_custom.php)

Код будет следующий:

//TODO: Write your own macroses here
public function my_thumbnail($path, $width, $hight, $template, $max) {
	if ($width>$hight){
		if($max>$width) {
			$my_thumbnail = "<img src=".$path." width=".$width." height=".$hight."";
		} else {
			$my_thumbnail = "%system makeThumbnail('.".$path."', '".$max."', 'auto', '".$template."')%";
		}
	} else {
		if($max>$hight){
			$my_thumbnail = "<img src=".$path." width=".$width." height=".$hight."";
		} else {
			$my_thumbnail = "%system makeThumbnail(.".$path.", auto, ".$max.", ".$template.")%";
		}
	}			
	return $my_thumbnail; 
}


Для использования его в tpl-шаблонах сделаем следующее:

В вызове шаблона в папке tpls/data/ваш_шаблон.tpl указываем:

$FORMS['img_file'] = <<<END
%custom my_thumbnail(%src%, %width%, %height%, имя_шаблона_для_вывода, 100)%
END;

100 - это значения высоты и ширины, которые нас интересуют для вывода (относительно которых будут проверяться размеры изображения)


Шаблон для вывода (находится в папке /templates/название_шаблона/tpls/thumbs) может быть таким:

<?php

$FORMS = Array();

$FORMS['image'] = <<<END

<img src="%src%" width="%width%" height="%height%" 
END;

?>


То есть он подставит только начало кода для изображения, а окончание "некоторый код />" будет указано в шаблоне, где будет выводится изображение.