Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как правильно изменить скрипт?

Как правильно изменить скрипт?


     26.06.2022    хак, php    Все вопросы » Общие вопросы по PHP    159

вопрос
Всем привет! Есть код:
		$tpl->copy_template = preg_replace_callback('#\\[id(>|<|=)(\d+)\\](.*?)\\[/id\\]#is', function($m) use ($row) {
			$id = (int)$m[2];
			if ($m[1] == '>') {
				return $row['id'] > $id ? $m[3] : '';
			} elseif ($m[1] == '<') {
				return $row['id'] < $id ? $m[3] : '';
			} else {
				return $row['id'] == $id ? $m[3] : '';
			}
		}, $tpl->copy_template);


Он выводит теги:
[id>3000] показывать если ID новости 3001 и больше [/id]
[id<5000] показывать если ID новости 4999 и меньше [/id]
[id=1000] показывать если ID строго равен 1000 [/id]

Помогите сделать так, чтобы было только для знака = и можно было id перечислять через запятую, вот так:
[id=1,2,3,4] показывать если ID строго равен 1,2,3,4[/id]

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


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

dj-avtosh
PHP-developer

dj-avtosh - 27 июня 2022 12:44 -

Вам нужно

(\d+)


заменить на

((?:\d\,?)+)


и тогда в группу 2 попадут цифры через запятую, или просто цифры.

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

TeraMoune
Эксперт

TeraMoune - 27 июня 2022 14:09 -

Есть родной тег [news=1,2,3] текст [/news]
Выводят заключенный в них текст, если посетитель просматривает полную новость указанных в параметре тега новостей, где 1,2,3 это ID новостей.

hippahap
Юзер

hippahap - 27 июня 2022 19:48 -

У меня это для других целей. Доработана страница добавления новостей, на неё передаётся id категории и вот для каждой категории хочу выводить свои дополнительные поля, которые можно заполнять.

dj-avtosh
PHP-developer

dj-avtosh - 28 июня 2022 11:22 -

Вообще не понятно, строго равен 1,2,3,4 или равен 1 или 2 или 3 или 4? Пишите конкретно

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

dj-avtosh
PHP-developer

dj-avtosh - 28 июня 2022 11:30 -

Если нужно выбрать из 1,2,3 (то что я спросил выше и опустить при этом нули), то так:

$tpl->copy_template = preg_replace_callback('#\\[id(>|<|=)((?:\d\,?)+)\\](.*?)\\[/id\\]#is', function($m) use ($row) {
            
            if (!isset($m[2]))
            {
                return false;
            }
            
            if ('=' == $m[1] && true === strpos($m[2], ','))
            {
                $idsArr = explode(',', $m[2]);
                $idsArr = array_filter(array_map('intval', $idsArr));
                
                if(!empty($idsArr) && in_array($row['id'], $idsArr))
                {
                    return $m[3];
                }
                
            }
            
            $id = (int)$m[2];
            if ($m[1] == '>') {
                return $row['id'] > $id ? $m[3] : '';
            } elseif ($m[1] == '<') {
                return $row['id'] < $id ? $m[3] : '';
            } else {
                return $row['id'] == $id ? $m[3] : '';
            }
        }, $tpl->copy_template);

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

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

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

наверх