Точный поиск по дополнительным полям при использовании custom
В DLE тег {custom} используется для вывода материалов по заданным критериям. Одним из таких критериев/параметров являются дополнительные поля и при использовании тега подобно этому варианту:
{custom category="1,2,3,4,5" xfields="Россия,2019" navigation="no" cache="yes"}
вы получите все материалы (например – фильмы), где в дополнительных полях указано «2019» или «Россия» (дата выхода и страна соответственно).
Для уточнения, в каких полях нужно искать эту информацию, можно добавить название самих полей:
{custom category="1,2,3,4,5" xfields="country|Россия,year|2019" navigation="no" cache="yes"}
В обоих случаях код отрабатывает, как и должен, за исключением одного момента. Как мы знаем, на примере все той же ситуации с фильмами), российские фильмы могли выйти не только в 2019 году. Так же, как в 2019 году, могли выйти не только российские фильмы.
Улавливаете логику? Стандартные возможности движка, если верить документации на момент публикации этой статьи, не позволяют искать записи с конкретным набором значений полей. Например, нам нужно получить четко все фильмы российского производства за 2019 год.
Была изучена логика работы стандартной функции движка, которая позволяет в принципе искать нужные нам записи по доп.полям, и на ее основе создана следующая, необходимая для решения описанной ранее задачи.
Установка:
1. Открыть engine/modules/functions.php и найти:
if( preg_match( "#xfields=['\"](.+?)['\"]#i", $param_str, $match ) ) {
Добавить выше:
if(preg_match("#xfields_exact=['\"](.+?)['\"]#i", $param_str, $match)) {
$match[1] = explode(",", $match[1]);
$temp_array = array();
foreach($match[1] as $value) {
$value = @$db->safesql(htmlspecialchars(strip_tags(stripslashes(trim($value))), ENT_QUOTES, $config["charset"]));
$temp_array[] = "p.xfields LIKE '%".$value."%'";
}
$where[] = implode(" AND ", $temp_array);
}
Готово!
Теперь в теге {custom} будет доступен параметр xfields_exact который поможет находить записи с точным набором значений доп.полей. Пример вывода всех российских фильмов за 2019 год:
{custom category="1,2,3,4,5" xfields_exact="Россия,2019" navigation="no" cache="yes"}
И вариант с явным указанием поля (рекомендуется использовать именно его):
{custom category="1,2,3,4,5" xfields_exact="country|Россия,year|2019" navigation="no" cache="yes"}
Эта статья будет полезна, если вы отбираете материалы строго по нескольким дополнительным полям. При поиске по одному полю используйте стандартный параметр тега - xfields, а для отрицания - xfieldsexclude.
• Кодировка: utf-8
• Автор: Артем Мáлков
• Источник
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.