вопрос
xfields выводятся все публикации, содержащие указанное в параметре значение дополнительных полей новостей. Допускается также перечисление значений в параметре через запятую. Например, при использовании {custom xfields="значение 1,значение 2"} будут выведены новости, в которых есть дополнительные поля содержащие "значение 1" или "значение 2".
Подскажите как сделать что бы {custom xfields="значение 1,значение 2"} значения искались только по определенному доп.полю? а не по всем полям что есть.
Подскажите как сделать что бы {custom xfields="значение 1,значение 2"} значения искались только по определенному доп.полю? а не по всем полям что есть.
Открываем /engine/modules/functions.php файл ищем в функции custom_print следующий код:
senxf - это поиск по доп полю с точным значением. Например
selxf - это поиск по доп полю с возможным значением. Например
notsenxf - обратное свойство параметра senxf
notselxf - обратное свойство параметра selxf
Что бы задать несколько полей прописывать так:
Автор: (с) Я
if( preg_match( "#category=['\"](.+?)['\"]#i", $param_str, $match ) ) {
Выше вставляем:if( preg_match( "#senxf=['\"](.+?)['\"]#i", $param_str, $match ) ) {
if(count(explode("||", $match[1])) > 1)
{
$field = explode ("||", $match[1]);
$xf_where = array();
for($i = 0; $i < count($field); $i++)
{
$tmp_exp = explode ("|", $field[$i]);
$xf_where[] = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . trim($tmp_exp[0]) . "|', -1 ) , '||', 1 ) = '{$tmp_exp[1]}'";
}
$xf_where = implode (" AND ", $xf_where);
}
else
{
$field = explode ("|", $match[1]);
$xf_where = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . trim($field[0]) . "|', -1 ) , '||', 1 ) = '{$field[1]}'";
}
$where[] = $xf_where;
}
if( preg_match( "#selxf=['\"](.+?)['\"]#i", $param_str, $match ) ) {
if(count(explode("||", $match[1])) > 1)
{
$field = explode ("||", $match[1]);
$xf_where = array();
for($i = 0; $i < count($field); $i++)
{
$tmp_exp = explode ("|", $field[$i]);
$xf_where[] = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . trim($tmp_exp[0]) . "|', -1 ) , '||', 1 ) LIKE '%{$tmp_exp[1]}%'";
}
$xf_where = implode (" AND ", $xf_where);
}
else
{
$field = explode ("|", $match[1]);
$xf_where = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . trim($field[0]) . "|', -1 ) , '||', 1 ) LIKE '%{$field[1]}%'";
}
$where[] = $xf_where;
}
if( preg_match( "#notsenxf=['\"](.+?)['\"]#i", $param_str, $match ) ) {
if(count(explode("||", $match[1])) > 1)
{
$field = explode ("||", $match[1]);
$xf_where = array();
for($i = 0; $i < count($field); $i++)
{
$tmp_exp = explode ("|", $field[$i]);
$xf_where[] = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . trim($tmp_exp[0]) . "|', -1 ) , '||', 1 ) != '{$tmp_exp[1]}'";
}
$xf_where = implode (" AND ", $xf_where);
}
else
{
$field = explode ("|", $match[1]);
$xf_where = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . trim($field[0]) . "|', -1 ) , '||', 1 ) != '{$field[1]}'";
}
$where[] = $xf_where;
}
if( preg_match( "#notselxf=['\"](.+?)['\"]#i", $param_str, $match ) ) {
if(count(explode("||", $match[1])) > 1)
{
$field = explode ("||", $match[1]);
$xf_where = array();
for($i = 0; $i < count($field); $i++)
{
$tmp_exp = explode ("|", $field[$i]);
$xf_where[] = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . trim($tmp_exp[0]) . "|', -1 ) , '||', 1 ) NOT LIKE '%{$tmp_exp[1]}%'";
}
$xf_where = implode (" AND ", $xf_where);
}
else
{
$field = explode ("|", $match[1]);
$xf_where = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . trim($field[0]) . "|', -1 ) , '||', 1 ) NOT LIKE '%{$field[1]}%'";
}
$where[] = $xf_where;
}
Использование:senxf - это поиск по доп полю с точным значением. Например
{custom senxf="year|2015"}
выведет все новости, которые имеют в доп поле year значение 2015.selxf - это поиск по доп полю с возможным значением. Например
{custom selxf="ingredients|яйца||ingredients|рис"}
выведет все новости, имеют в доп поле ingredients значение яйца и рис (то есть, эти значения могут быть где-то в середине текста этого поля (для этого и служит этот тег (если значение в поле одно, к примеру год, то используйте первый))).notsenxf - обратное свойство параметра senxf
notselxf - обратное свойство параметра selxf
Что бы задать несколько полей прописывать так:
название доп поля на латинице|значение поля||новое поле|значение нового поля
Автор: (с) Я