Навигация
Главная
Бесплатные шаблоны dle
Платные шаблоны dle
Бесплатные модули dle
Хаки dle
Скачать DataLife Engine
Заработок для Web мастеров
Контакты
Rss
Вход на сайт
  Логин
  Пароль
Популярные новости
Реклама

Условия IF - Расширение функционала шаблонизатора

Условия IF - Расширение функционала шаблонизатора

Расширение функционала шаблонизатора новостей условием IF.
Многофункциональный хак, позволяющий выводить заданный текст в зависимости от значения полей новости или доп. полей xfields. Данный хак предназначен для работы только в шаблонах короткой новости, полной новости и в шаблонах тегов custom.

Установка хака в dle:
Открыть файл engine/modules/functions.php
Найти строку
?>

ПЕРЕД ней вставить:
function parseIf($m){
	global $row,$config;
	$m[1] = trim($m[1]);
	$m[2] = trim($m[2]);
	preg_match("#^([0-9]+)\<(.+?)\>([0-9]+)?$#is",$m[1],$f);
	if($f[3]){
		$xf = explode("xfvalue_",$f[2]);
		if($xf[1]) $v = floatval($row['xfields'][$xf[1]]);
		else $v = floatval($row[$f[2]]);
		if($v>=floatval($f[1]) AND $v<floatval($f[3])) return $m[2];
		else return "";
	}
	preg_match("#^(.+?)(!~|~|!=|=|>=|<=|<|>)['\"]?(.*?)['\"]?$#is",$m[1],$f);
	if(!$f[2]) return $m[0];
	$xf = explode("xfvalue_",$f[1]);
	if($xf[1]) $v = $row['xfields'][$xf[1]];
	elseif($f[1]=='tags') $v = $row[$f[1]][0];
	else $v = $row[$f[1]];
	$v = strtolower(strip_tags($v));
	$fval = strtolower($f[3]);
	switch($f[2]){
		case ">":
			$v = floatval($v);
			$fval = floatval($fval);
			if($v>$fval) return $m[2];
			break;
		case "<":
			$v = floatval($v);
			$fval = floatval($fval);
			if($v<$fval) return $m[2];
			break;
		case ">=":
			$v = floatval($v);
			$fval = floatval($fval);
			if($v>=$fval) return $m[2];
			break;
		case "<=":
			$v = floatval($v);
			$fval = floatval($fval);
			if($v<=$fval) return $m[2];
			break;
		case "!=":
			if($v!=$fval) return $m[2];
			break;
		case "~":
			if(dle_strrpos($v,$fval,$config['charset'])!==false) return $m[2];
			break;
		case "!~":
			if(dle_strrpos($v,$fval,$config['charset'])===false) return $m[2];
			break;
		default:
			if($v===$fval) return $m[2];
	}
}


Открыть файл ./engine/modules/...
./show.custom.php
./show.full.php
./show.short.php
Найти строку:
$tpl->compile( 'content' );

ПЕРЕД ней вставить:
if(!is_array($row['xfields'])) $row['xfields'] = xfieldsdataload( $row['xfields'] );
$tpl->copy_template = preg_replace_callback("#\\[if (.+?)\\](.*?)\\[/if\\]#is","parseIf",$tpl->copy_template);


Открыть файл engine/modules/show.custom.php
Найти строку:
$global_news_count = 0;

После нее вставить:
global $row;


Установка хака для dle завершена.

Пример использования:
В шаблоне короткой, полной или custom новости использовать теги условий:
[if field='текст']...[/if]
[if field!='текст']...[/if]
[if field>1]...[/if]
[if field>=2]...[/if]
[if field<3]...[/if]
[if field<=4]...[/if]
[if 56]...[/if]
[if field~'vk.com']...[/if] - выведет текст если в поле встречается текст 'vk.com'
[if field!~'vk.com']...[/if] - выведет текст если в поле НЕ встречается текст 'vk.com'

где `field` может быть:
id - порядковый номер новости (число)
autor - имя автора новости (текст)
date - дата публикации (число, дата в unix формате - 1384805563)
short_story - текст короткой новости (текст)
full_story - в шаблоне короткой новости это количество символов в полном описании. В шаблоне полной новости - сам текст. (число/текст)
title - текст заголовка (текст)
descr - метатег описания (текст)
keywords - метатег "ключевые слова" (текст)
category - список категорий в которых отмечена новость (в старых версиях только первый ID из списка) (текст)
alt_name - заголовок на латинице, для формирования адреса страницы. (текст)
comm_num - количество комментариев (число)
allow_comm - комментарии разрешены (число, 1/0)
allow_main - новость публикуется на главной (число, 1/0)
approve - новость прошла модерацию (число, 1/0)
fixed - новость зафиксирована (число, 1/0)
symbol - символьный код (текст)
tags - первый тег из списка тегов (текст)
news_read - количество просмотров (число)
allow_rate - рейтинг разрешен (число, 1/0)
rating - рейтинг статьи, сумма всех значений (число)
vote_num - количество проголосовавших в рейтинге (число)
votes - голосования в новости (число, 1/0)
view_edit - отображать причину редактирования (число, 1/0)
disable_index - запретить индексацию (число, 1/0)
editdate - дата редактирования (число, дата в unix формате - 1384805563)
editor - имя редактора (текст)
reason - причина редактирования (текст)
user_id - ID автора публикации (число)
xfvalue_xxx - значение доп. поля

Разумеется для некоторых из этих тегов уже предусмотрены фиксированные теги условий, такие как: [fixed]...[/fixed], [comments]...[/comments], [poll]...[/poll], [xfgiven_xxx]...[/xfgiven_xxx] и др.
Но во первых они прописаны не для всех значений и главное - не обладают той гибкостью, что предоставляет данных хак. В чем вы можете убиться посмотрев примеры ниже.

Пример:
[if id>1000]...[/if] - выведет текст для всех новостей, ID которых строго больше 1000, т.е. 1001, 1002 и т.д.
[if comm_num=y - больше или равно
x<=y - меньше или равно
x=y - строго равно
x!=y - не равно
x~y - строка Y встречается в поле X
x!~y - строка Y не встречается в поле X
y1y2 - диапазон
где:
x - имя поля или доп.поля
y - значение, числовое или текстовое
y1 и y2 - нижняя и верхняя границы для фильтра по диапазону

24 февраля 2016 добавил dle
     просмотров 2901   комментариев (0)

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.














Rambler's Top100

Яндекс цитирования