Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Шаблоны (TPL) » использование [if ... ?

использование [if ... ?


     09.09.2026    Шаблоны (TPL), Общие вопросы по PHP    329

вопрос
В DLE, есть хорошая возможность использовать [if tags="tags1"...

Все прекрасно работает...

Но одна заковыка, если присвоено статье несколько tags, и есть разные условия к каждому из них, в моем случае вывод картинки:

if tags="tags1"...; if tags="tags2"; и т.д., то выведутся все...

Как сделать , что бы выводился только один if tags="tags1"... (Например, первый) силами/возможностями if.

Если это это невозможно, то посоветуй как это сделать

Ответа пока нет


7 комментариев

TeraMoune
Эксперт

TeraMoune - 9 сентября 2026 17:31 -

Вы можете разве что использовать одну конструкцию условия но в ней указать две проверки и задать определение условию через (OR) или (AND) слова, как воспринимать условие.

mvia
Юзер

mvia - 10 сентября 2026 12:14 -

Это верно, условий много, тэговов очень много ...

lutskboy
Эксперт

lutskboy - 12 сентября 2026 19:18 -

на js скрыть все картинки кроме первой

mvia
Юзер

mvia - 13 сентября 2026 17:40 -

Цитата: lutskboy
на js скрыть все картинки кроме первой

Я думаю, как сделать PHP-возможностями одноразовую обработку
[if field = "tags"]

Только "tags", может кто знает где и как?
Как думаете?

TeraMoune
Эксперт

TeraMoune - 16 сентября 2026 00:17 -

На самом деле нет смысла делать это только для tags, там всё общее и никак не отличается. Поэтому делается это в рамках одной итерации вызова обработки тега.

Сделать это конечно же можно, но я только подскажу мысль и приведу пример. Делается это где-то в templates.class.php в функции обработки тега условий. В этой функции нужно дописать код для реализации параметра допустим group. Таким параметром можно будет выделять в общую группу теги. Переменную использовать как глобальную, принцип должен быть таким, если первый тег имеет group с указанным именем то в глобальную переменную выводится результат работы функции. Каждая другая итерация вызова функции проверяет параметр и если он указан то проверяется имя параметра в глобальной переменной и смотрит, успешно или нет, в зависимости от наличия и того какое состояние будет решено продолжать ли работу функции.

dj-avtosh
PHP-developer

dj-avtosh - 18 сентября 2026 19:13 -

Здравствуйте. Я так понял, нужно заканчивать работу поиска как только выпало перовое совпадение (и речь о fullstory.tpl):

В engine/modules/show.full.php найти:
DLEXFields::Compile($row, $tpl, $xfields_in_news, $all_xf_content);


Вставить ниже:
if (strpos($tpl->copy_template, '[first-match]') !== false) {
	$tags = array_flip(array_filter(array_map(fn($v) => dle_strtolower(trim($v)), explode(',', $row['tags'] ?? ''))));

	$tpl->copy_template = preg_replace_callback('~\[first-match\](.*?)\[/first-match\]~is', function($m) use ($tags) {
		preg_match_all('~\[if\s+tags=["\']([^"\']+)["\']\](.*?)\[/if\]~is', $m[1], $ifs, PREG_SET_ORDER);

		foreach ($ifs as $if)
			foreach (explode(',', $if[1]) as $tag)
				if (isset($tags[dle_strtolower(trim($tag))])) return $if[2];

		return '';
	}, $tpl->copy_template);
}


А в fullstory.tpl:

[first-match]
[if tags="tag1"]Картинка 1[/if]
[if tags="tag2"]Картинка 2[/if]
[if tags="tag3"]Картинка 3[/if]
[/first-match]


Как только система находит первое подходящее условие [if tags], она выводит его содержимое и дальше уже ничего не проверяет. Все следующие условия просто пропускаются.

По заказам пишем сюда: @Rud00y

Сложные заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

mvia
Юзер

mvia - 20 сентября 2026 16:27 -

Спасибо!
Попробую сегодня-завтра.
Это правильная идея, остановить поиск при нахождении первого вхождения. Примерно это и думал...
Спасибо ещё раз ...

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

 31.01.2014 alexandros.xeiladakis  Шаблоны (TPL)
наверх