Подсчет постов категории и кэширование в модуль DLE

digitalpnz
На сайте с 03.05.2012
Offline
43
902

Есть модуль для DLE который при переходе в категорию показывает автоматически подкатегории.

Прикрутил счетчик кол-ва постов в подкатегории, вопрос - как это все дело кэшировать ?

Да и еще, счетчик считает только посты в категории не учитывая что в категории может быть дочерняя со своими постами, как сделать подсчет чтобы считал учитывая вложенность?

Код модуля

<?php

if(!defined('DATALIFEENGINE'))
{
die("Hacking attempt!");
}
function CatMenuUrl( $id, $all_info ) {
if ( ! $id ) return;
$parent_id = $all_info[$id]['parentid'];
$url = $all_info[$id]['alt_name'];
while ( $parent_id ) {
$url = $all_info[$parent_id]['alt_name'] . "/" . $url;
$parent_id = $all_info[$parent_id]['parentid'];
if ( $all_info[$parent_id]['parentid'] == $all_info[$parent_id]['id'] ) break;
}
return $url;
}

#-----------------------------------------#

if ($do == "cat" and $category != '' and $subaction == '') {
if( $category) {

foreach ( $cat_info as $key => $cats ) {
$all_info[$key]['id'] = $cats['id'];
$all_info[$key]['parentid'] = $cats['parentid'];
$all_info[$key]['name'] = $cats['name'];
$all_info[$key]['alt_name'] = $cats['alt_name'];
$all_info[$key]['icon'] = $cats['icon'];
if ( $cats['alt_name'] == $category )
{$id_now = $cats[id];}
}
foreach ( $cat_info as $key => $cats ) {
$all_info[$key]['id'] = $cats['id'];
$all_info[$key]['parentid'] = $cats['parentid'];
$all_info[$key]['name'] = $cats['name'];
$all_info[$key]['alt_name'] = $cats['alt_name'];
$all_info[$key]['icon'] = $cats['icon'];

//Подсчитаем количество новостей в выводимых подкатегориях
$row = $db->super_query( "SELECT COUNT(*) as count FROM " . USERPREFIX . "_post WHERE category=". $cats[id] . "" );

$news_counter = $row['count'];


if ($cats[parentid] == $id_now) { $id_category = $cats[id];
if ( $config['allow_alt_url'] == "yes" )


$cat_menu .= "<div class=\"catz\">

<a href=\"" . $config['http_home_url'] . get_url($id_category) . "/\" rel=\"index section\">

<div align=\"center\"><img src=\"/uploads/folder.png\" align=\"center\"><br>". $cats[name] . "
($news_counter)
</a></div></div>";


else $cat_menu.='<li>
<h3>
<a rel=\"index section\" href="'.$config['http_home_url'].'index.php?do=cat&amp;category='.$cats[alt_name].'">'.$cats[name]."</a>
</h3>
</li>";
}
}

}
}

?>
дани мапов
На сайте с 06.09.2012
Offline
204
#1


/* Функция сохранения кеш
(взята с API DLE, API не используется ввиду глючности множественных подключений модов с API) */
function SaveToCache($fname, $vars) {
$cache_dir = ENGINE_DIR."/cache/";
$filename = $fname.".tmp";
$f = @fopen($cache_dir.$filename, "w+");
@chmod('0777', $cache_dir.$filename);
if (is_array($vars)) $vars = serialize($vars);
@fwrite($f, $vars);
@fclose($f);
return $vars;
}

/* Функция загрузки с кеша
(взята с API DLE, API не используется ввиду глючности множественных подключений модов с API) */
function LoadFromCache($fname, $timeout=300, $type = 'text') {
$cache_dir = ENGINE_DIR."/cache/";
$filename = $fname.".tmp";
if (!file_exists($cache_dir.$filename)) return false;
if ((filemtime($cache_dir.$filename)) < (time()-$timeout)) return false;
if ($type=='text'){
return file_get_contents($cache_dir.$filename);
} else {
return unserialize(file_get_contents($cache_dir.$filename));
}
}

Применение


$cat_menu = LoadFromCache( 'cat_menu', $cache_time, 'text' );
if ( !$cat_menu )
{
...............

SaveToCache( 'cat_menu', $cat_menu );
}
Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий