вопрос
Подскажите, есть ли модуль или каким образом можно выводить новости по различным критериям, например - вывод похожих новостей с этими же актёрами, вывод фильмов этого же режиссёра и т.д.
Ответил: PunPun
1. http://pafnuty.name/statyi/163-blockpro-47.html
2. Попробовать этот метод :
Открываем /engine/modules/functions.php файл ищем :
senxf - это поиск по доп полю с точным значением. Например
selxf - это поиск по доп полю с возможным значением. Например
Или
notsenxf - обратное свойство параметра senxf
notselxf - обратное свойство параметра selxf
2. Попробовать этот метод :
Открываем /engine/modules/functions.php файл ищем :
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 значение яйца и рис (то есть, эти значения могут быть где-то в середине текста этого поля (для этого и служит этот тег (если значение в поле одно, к примеру год, то используйте первый))).
Или
{custom selxf="director|[xfavule_director]"}- выведет новости по значению доп поля director текущей новости.
notsenxf - обратное свойство параметра senxf
notselxf - обратное свойство параметра selxf