вопрос
Здравствуйте, ищу хак, который бы выводил количество новостей по значению доп. поля, по аналогии с тегами. И вроде нашел, что-то подходящее от PunPun, но материал старый, и похоже не работает, или я что -то не так делаю. В общем буду рад любой помощи, и также автора скрипта.
<?PHP
/*
=====================================================
Count Field News
-----------------------------------------------------
Автор : Gameer
-----------------------------------------------------
Site : http://gameer.name/
-----------------------------------------------------
Copyright (c) 2016 Gameer
=====================================================
Данный код защищен авторскими правами
*/
defined("DATALIFEENGINE") || die("Hack");
$allow_cache = ($config['version_id'] >= '10.2') ? $config['allow_cache'] == '1' : $config['allow_cache'] == "yes";
$is_change = false;
if (!$allow_cache) // если кэш не включен включаем принудительно
{
if ($config['version_id'] >= '10.2')
$config['allow_cache'] = '1';
else
$config['allow_cache'] = "yes";
$is_change = true;
}
if(!function_exists('clean_string'))
{
function clean_string($db, $value)
{
return $db->safesql(trim(strip_tags(stripslashes($value))));
}
}
$xfield = clean_string($db, $xfield);
$value = clean_string($db, $value);
$news_cfn = false;
$news_cfn = dle_cache( "news_cfn" , $config['skin'] . $xfield . $value); // подгружаем из кэша
if($news_cfn)
{
echo $news_cfn;
exit;
}
if($config["version_id"] < '11.0')
{
$count = $db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE xfields LIKE '%{$xfield}|{$value}%'");
$count["count"] = ($count["count"] > 0) ? intval($count["count"]) : 0;
echo $count["count"];
}
else
{
$count = $db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_xfsearch WHERE tagname='{$xfield}' AND tagvalue='{$value}'");
$count["count"] = ($count["count"] > 0) ? intval($count["count"]) : 0;
echo $count["count"];
}
create_cache( "news_cfn", $count["count"], $config['skin'] . $xfield . $value, true);
if($is_change)
$config['allow_cache'] = false;
Ответил: PunPun
<?PHP
/*
=====================================================
Count Field News
-----------------------------------------------------
Author : PunPun
-----------------------------------------------------
Site : https://punpun.name/
-----------------------------------------------------
Copyright (c) 2018 PunPun
=====================================================
Данный код защищен авторскими правами
*/
defined("DATALIFEENGINE") || die("go your way stalker");
$xfield = $db->safesql(strip_tags(stripslashes(trim($xfield))));
$value = $value ? $db->safesql(strip_tags(stripslashes(trim($value)))) : false;
if (!$value) {
return;
}
$is_change = false;
if (!$config['allow_cache']) {
$config['allow_cache'] = 1;
$is_change = true;
}
$cache_count_xfield = dle_cache("news_count_xfield", $config['skin'] . $xfield . $value);
if ($cache_count_xfield) {
echo $cache_count_xfield;
} else {
$thisdate = date("Y-m-d H:i:s", time());
if ($config['no_date'] AND !$config['news_future']) {
$where_date = " AND date < '" . $thisdate . "'";
} else {
$where_date = '';
}
$xf_sql = "SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, '{$xfield}|', -1), '||', 1) LIKE '%{$value}%'";
$count = $db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$xf_sql} AND SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, '{$xfield}|', -1), '||', 1) NOT LIKE '%|%' AND approve='1'" . $where_date);
echo $count['count'];
create_cache("news_count_xfield", $count['count'], $config['skin'] . $xfield . $value);
}
if ($is_change) {
$config['allow_cache'] = false;
}
Подключение:
{include file="engine/modules/xf_count.php?xfield=название_доп_поля&value=значение"}