Выводим категории списком + количество игр

Этот хак будет полезен тем, у кого на сайте много категорий и вручную прописывать каждую в меню долго и неудобно.

Открываем engine/modules/main.php

Ищем:

$ajax .= <<<HTML

Добавляем ВЫШЕ:

//#-----------Хак для вывода списка категорий в DLE-----------------------#
$sql_result = $db->query("SELECT * FROM " . PREFIX . "_category ORDER BY posi");
while($row = $db->get_row($sql_result))
{
    if ($row['parentid'] == 0)
    $cat_menu.='<a href="/'.$row['alt_name'].'/"><div class="maincat transition"><img src="/images/cat/'.$row['id'].'.jpg"><div class="name">'.$row['name']." </div><span class='number'>{namaunt=".$row['id']."}</span><div class='clr'></div></div></a>";
    else        
    $cat_menu.='<a href="/'.$row['alt_name'].'/"><div class="subcat transition"><img src="/images/cat/'.$row['id'].'.jpg"><div class="name">'.$row['name']." </div><span class='number'>{namaunt=".$row['id']."}</span><div class='clr'></div></div></a>";   
}
$tpl->set('{cat_menu}', $cat_menu);
//#-----------Хак для вывода списка категорий 2 в DLE------#

 Для правильного вывода счетчика игр в категориях

Открыть файл engine/init.php

Находим строчку:

require_once ENGINE_DIR . '/modules/main.php';

Перед ней вставляем:

////////////////////////////////////////////////////////////////////////////////////////////////
$tcache = $config['allow_cache'];
if(!$tcache OR $tcache==1) $config['allow_cache'] = 1;
else $config['allow_cache'] = 'yes';
$cat_amounts = dle_cache("news_amount");
if(!$cat_amounts){
    $cat_amounts = array();
    $db->query("SELECT category,id FROM ".PREFIX."_post WHERE approve");
    while($row = $db->get_row()){
        if(strpos($row['category'],",")!==false){
            $c = explode(",",$row['category']);
            foreach($c as $k) if(!in_array($row['id'],$cat_amounts[$k])) $cat_amounts[$k][] = $row['id'];
        }elseif(!in_array($row['id'],$cat_amounts[$row['category']])) $cat_amounts[$row['category']][] = $row['id'];
    }
    namaunt_childs();
    foreach($cat_amounts as $k=>$v) $cat_amounts[$k] = count($v);
    create_cache("news_amount",serialize($cat_amounts));
}else $cat_amounts = unserialize($cat_amounts);
$config['allow_cache'] = $tcache;

function namaunt_childs($parent=0){
    global $cat_amounts,$cat_info;
    $childs = array();
    foreach($cat_info as $k=>$v){
        if($v['parentid']==$parent){
            $temp = namaunt_childs($k);
            if(!is_array($cat_amounts[$k])) $cat_amounts[$k] = array();
            $cat_amounts[$k] = array_unique(array_merge($cat_amounts[$k],$temp));
            $childs = array_unique(array_merge($childs,$cat_amounts[$k]));
        }
    }
    return $childs;
}

function namaunt($m){
    global $cat_amounts,$category_id;
    $id = is_array($m)?intval($m[1]):intval($m);
    if($id<1){
        if($category_id) $id = $category_id;
        else return 0;
    }
    return $cat_amounts[$id];
}
////////////////////////////////////////////////////////////////////////////////////////////////

Открываем файл

engine/modules/main.php

Найти строку:

echo $tpl->result['main'];

ПЕРЕД ней вставить:

$tpl->result['main'] = preg_replace_callback("#{namaunt=(\d+)}#i","namaunt",$tpl->result['main']);

В любом месте шаблона сайта использовать тег:
{namaunt=5}
где 5 — ID желаемой категории
{namaunt=0} — будут выводиться количество новостей из просматриваемой категории.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: