Суббота, 02.07.2011, 16:54
Проверенный
Есть проблема небольшая, слишком много категорий - надо убрать некоторые под кат в меню есть такая строчка
Code // Формируем массивы скрываемых категорий if ( $hidden != 0 ) $hiddens = explode( ',', $hidden ); else $hiddens = array();
незнаю как точно прописать чтоб допустим как на сайте http://horroralbum.ru/ (не реклама) убрались все дискографии под кат... по какому признаку по id категории?и если да то прописывать можно через запятые?допустим так 4, 6, 17... |
|
|
Суббота, 02.07.2011, 17:03
Пользователь
До боли знакомый шаблон от CSR(http://verstka.pro/) Наверняка, не приобретали его? Если бы приобретали, то автор вечером помог Вам с категориями.
По поводу проблемы: вместе с шаблоном должны были идти файлы (engine/modules/), среди которых должны быть: cat_menu.functions.php cat_menu.php ..
Не могли бы выложить их содержимое здесь? С данным шаблоном не работал и структуру вывода не знаю. |
Ищу достойных журналистов и файловиков к себе в штаб. Ежедневный просмотр раздела "Вакансии", поиск рабочей силы. Интересен быстрый зароботок копипастом? Пишите в личку. |
|
Суббота, 02.07.2011, 17:11
Проверенный
cat_menu.functions.php
Code <?php /* ===================================================== Categories Menu version 2.0 Beta ----------------------------------------------------- http://www.ikeep.ws/ ----------------------------------------------------- Copyright (c) 2009, 2010 Chrono ===================================================== Данный код защищен авторскими правами ===================================================== Файл: cat_menu.functions.php ----------------------------------------------------- Назначение: Функции построения дерева категорий ===================================================== */
if( ! defined( 'DATALIFEENGINE' ) ) { define( 'DATALIFEENGINE', true ); } if( ! defined( 'ROOT_DIR' ) ) { define( 'ROOT_DIR', substr( dirname( __FILE__ ), 0, - 11 ) ); } if( ! defined( 'ENGINE_DIR' ) ) { define( 'ENGINE_DIR', ROOT_DIR . '/engine' ); }
/* Функция сохранения кеш (взята с API DLE, API не используется ввиду глючности множественных подключений модов с API) */ function CatMenuSave($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 CatMenuLoad($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)); } }
/* Функция построения адреса подкатегории для ЧПУ (аналогична стандартной функции DLE) */ 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; }
/* Функция подсчета общего количества новостей и комментариев */ function CatMenuStats( $all_info = array() ) { $allstats['post_new'] = 0; $allstats['post_all'] = 0; $allstats['comm_new'] = 0; $allstats['comm_all'] = 0; foreach ( $all_info as $cats ) { $allstats['post_new'] += $cats['new']; $allstats['post_all'] += $cats['all']; $allstats['comm_new'] += $cats['newc']; $allstats['comm_all'] += $cats['allc']; } $allstats['post_all'] -= $allstats['post_new']; $allstats['comm_all'] -= $allstats['comm_new']; return $allstats; }
/* Функция подсчета сумм новостей и комментариев из подкатегорий */ function CatMenuNews( $current = 0, $all_info = array(), $start = 0, $news = array() ) { global $config; // конфигурация движка static $news; // При первом вызове берем за основу новости самой категории if ( $current == $start ) { $news['new'] = $all_info[$current]['new']; $news['all'] = $all_info[$current]['all']; $news['newc'] = $all_info[$current]['newc']; $news['allc'] = $all_info[$current]['allc']; } // Если стоит настройка НЕ выводить новости опубликованные в субкатегориях, то не выводим их и в меню - закомментируйте строчку ниже, если хотите, чтобы сумма новостей в ветке категорий считалась независимо от настроек движка if ( $config['show_sub_cats'] == 0 ) return $news; // если есть категории, продолжаем... if ( count( $all_info ) > 0 ) { // ищем, есть ли подкатегории у текущей категории foreach ( $all_info as $cats ) { // если у текущей категории есть потомки if ( $current == $cats['parentid'] ) $children[] = $cats['id']; } $subcount = count( $children ); if ( $current != $start ) { $news['new'] += $all_info[$current]['new']; $news['all'] += $all_info[$current]['all']; $news['newc'] += $all_info[$current]['newc']; $news['allc'] += $all_info[$current]['allc']; } // если у текущей категории есть подкатегории if ( $subcount > 0 ) { // потом собираем блок подкатегорий foreach ( $children as $id ) { CatMenuNews( $id, $all_info, $start, $news ); } } } // если это последний вызов функции if ( $current == $start ) { return $news; } }
/* Функция построения дерева меню */ function CatMenu( $current = 0, $all_info = array(), $new_days = 0, $com_days = 0, $iconimg = 0, $cute = 0, $hiddens = array() ) { global $config, $member_id; // конфигурация движка static $build; // переменная сборки // если есть категории, продолжаем... if ( count( $all_info ) > 0 ) { if( !in_array($current, $hiddens) ) { // ищем, есть ли подкатегории у текущей категории foreach ( $all_info as $cats ) { // если у текущей категории есть потомки if ( $current == $cats['parentid'] ) { // собираем их идентификаторы $children[] = $cats['id']; } } } $subcount = count( $children ); // проверка, это первый вызов if ( $current != 0 ) { if( !in_array($current, $hiddens) ) { // создаем стрелку если необходимо if ( $subcount > 0 ) {$arrow = " class=\"subcat\"";} else { $arrow = ''; } // создаем описание если доступно и обрезаем имя, если требуется $name = stripslashes( $all_info[$current]['name'] ); if ( $all_info[$current]['descr'] ) { $descr = " title=\"" . strip_tags( stripslashes( $all_info[$current]['descr'] ) ) . "\""; } else $descr = ''; if ( $cute > 0 and $cute < strlen($name) ) { $name = substr($name, 0 , $cute-3) . "..."; } // создаем смену иконок если необходимо if ( $iconimg == 1 ) { $caticon = "<img src=\""; $parent = $all_info[$current]['parentid']; // если есть иконка... if ( $all_info[$current]['icon'] ) {$caticon .= $all_info[$current]['icon'];} // если нет иконки, берем от родительской elseif ( $all_info[$parent]['icon'] ) {$caticon .= $all_info[$parent]['icon'];} // а если нет и родительской иконки - ставим по умолчанию else {$caticon .= "{THEME}/dleimages/no-icon.gif";} $caticon .= "\" border=\"0\" alt=\"\" align=\"middle\" />"; } elseif ( $iconimg == 2 and $all_info[$current]['parentid'] == 0 ) { $caticon = "<img src=\""; // если есть иконка... if ( $all_info[$current]['icon'] ) {$caticon .= $all_info[$current]['icon'];} // если нет иконки, берем от родительской else {$caticon .= "{THEME}/dleimages/no-icon.gif";} $caticon .= "\" border=\"0\" alt=\"\" align=\"middle\" />"; } elseif ( $iconimg == 3 and $all_info[$current]['parentid'] == 0 and $all_info[$current]['icon'] ) { $caticon = "<img src=\"" . $all_info[$current]['icon'] . "\" border=\"0\" alt=\"\" align=\"middle\" />"; } else { $caticon = ''; } $newmarker = ''; $alls_info = ''; // создаем информацию о комментариях в категории, если необходимо if ( $com_days > 0 ) { // получаем инфу о количестве новостей в категории и входящих в нее подкатегориях $count = CatMenuNews( $current, $all_info, $current ); $newc = $count['newc']; $allc = $count['allc']; if ($newc > 0) { $newmarker = " class=\"newc\""; $newc = "+".$newc; $allc -= $newc; } else { $newmarker = ''; $newc = ''; } // формируем показ информации о комментариях $comm_info = $allc . "<span class=\"newc\">" . $newc . "</span>"; } else $comm_info = false; // создаем информацию о новостях категории, если необходимо if ( $new_days > 0 ) { // получаем инфу о количестве новостей в категории и входящих в нее подкатегориях $count = CatMenuNews( $current, $all_info, $current ); $new = $count['new']; $all = $count['all']; // маркер категорий с новыми новостями if ($new > 0) { $newmarker = " class=\"new\""; $new = "+".$new; $all -= $new; } else { if (!$newmarker) $newmarker = ''; $new = ''; } // формируем показ информации о новостях #$post_info = $all . "<span class=\"new\">" . $new . "</span>"; $post_info = $all . "<span class=\"new\"></span>"; } else $post_info = false; // формируем итоговый показ информации if ( $comm_info or $post_info ) $alls_info .= '<span class="post_info">'; if ( $post_info ) $alls_info .= $post_info; if ( $comm_info ) $alls_info .= ' (' . $comm_info; if ( $comm_info ) $alls_info .= ')'; if ( $comm_info or $post_info ) $alls_info .= '</span>'; // создаем линк if ( $config['allow_alt_url'] == "yes" ) $build .= "<li" . $newmarker . "><a href=\"" . $config['http_home_url'] . CatMenuUrl( $current, $all_info ) . "/\" rel=\"index section\"" . $descr . $arrow . ">" . $caticon . "" . $name ."</a> (".$alls_info.")"; else $build .= "<li" . $newmarker . "><a href=\"{$config['http_home_url']}index.php?do=cat&category=" . $all_info[$current]['alt_name'] . "\" rel=\"index section\"" . $descr . $arrow . ">" . $caticon . "" . $name ."</a> (".$alls_info.")"; } } else { // если это первый вызов - создаем меню $build = ''; } // если у текущей категории есть подкатегории if ( $subcount > 0 ) { // то создаем ветку подкатегорий if ( $current != 0 ) $build .= "</li>"; // потом собираем блок подкатегорий for ( $i = 0; $i <= $subcount; $i++ ) { // если подкатегории завершились, закрываем блок и пункт списка if ( $i == $subcount ) { $build .= ""; } // а если нет - продолжаем строить else { CatMenu( $children[$i], $all_info, $new_days, $com_days, $iconimg, $cute, $hiddens ); } } } // если нет подкатегорий, закрываем пункт списка else { $build .= "</li>"; } } else {echo 'No categories';} // если это последний вызов функции if ( $current == 0 ) { // завершаем дерево категорий return $build; } }
/* Функция сборки рабочего массива */ function CatMenuInit ($post_list=false, $new_days = 0, $comm_list=false, $com_days=0) { global $cat_info; // формируем свой массив категорий без лишних данных foreach ( $cat_info as $key => $cats ) { // все необходимые нам сведения $all_info[$key]['id'] = $cats['id']; $all_info[$key]['parentid'] = $cats['parentid']; $all_info[$key]['posi'] = $cats['posi']; $all_info[$key]['name'] = $cats['name']; $all_info[$key]['alt_name'] = $cats['alt_name']; $all_info[$key]['icon'] = $cats['icon']; $all_info[$key]['descr'] = $cats['descr']; // если нужно кол-во новостей - включаем в обработку if ($new_days > 0 and $post_list != false) { $new_posts = 0; $all_posts = 0; $new_comms = 0; $all_comms = 0; foreach ( $post_list as $news ) { // если новости есть для данной категории if ( $news['category'] == $cats['id'] ) { $all_posts++; // увеличиваем счетчик всех новостей самой категории // создаем метку устаревания новости $old = strtotime($news['date']) - time() + 86400 * $new_days; // если новость не устарела увеличиваем счетчик новых новостей всех новостей самой категории if ( $old > 0 ) $new_posts++; // если нужно количество комментариев - включаем их в обработку if ($com_days > 0 and $comm_list != false) { $newc = 0; $allc = 0; foreach ( $comm_list as $comms ) { if ( $comms['post_id'] == $news['id'] ) { $allc++; $oldc = strtotime($comms['date']) - time() + 86400 * $com_days; if ( $oldc > 0 ) $newc++; } } $new_comms += $newc; $all_comms += $allc; } } } // сохраняем данные для категории $all_info[$key]['new'] = $new_posts; $all_info[$key]['all'] = $all_posts; if ($com_days > 0 and $comm_list != false) { $all_info[$key]['newc'] = $new_comms; $all_info[$key]['allc'] = $all_comms; } } } return $all_info;
}
?>
cat_menu.php
Code <?php /* ===================================================== Categories Menu version 2.0 Beta ----------------------------------------------------- http://www.ikeep.ws/ ----------------------------------------------------- Copyright (c) 2009, 2010 Chrono ===================================================== Данный код защищен авторскими правами ===================================================== Файл: cat_menu.php ----------------------------------------------------- Назначение: Вывод меню категорий ===================================================== */ if(!defined('DATALIFEENGINE')) { die("Hacking attempt!"); }
/* ===== ИНИЦИАЛИЗАЦИЯ ===== */
// Определение параметров конфигурации через шаблон if ( $copy ) $copy = intval( $copy ); else $copy = 0; if ( $cache_time ) $cache_time = intval( $cache_time ); else $cache_time = 14400; if ( $new_days ) $new_days = intval( $new_days ); else $new_days = 0; if ( $com_days ) $com_days = intval( $com_days ); else $com_days = 0; if ( $iconimg ) $iconimg = intval( $iconimg ); else $iconimg = 0; if ( $cute ) $cute = intval( $cute ); else $cute = 0; if ( $hidden ) $hidden = preg_replace( "/[^0-9,]/", "", urldecode($hidden) ); else $hidden = 0;
// Подключаем функции построения меню if( $copy == 0 ) include_once ( ENGINE_DIR.'/modules/cat_menu.functions.php' );
/* ===== ВЫВОД МЕНЮ ===== */ // получаем из кеша или формируем данные для вывода $cat_menu = CatMenuLoad( 'cat_menu_c'.$copy, $cache_time, 'text' ); if ( !$cat_menu ) { // собираем сведения обо всех одобренных публикациях, если необходимо if ($new_days > 0) { $sql = $db->query( "SELECT id, date, category FROM " . PREFIX . "_post WHERE approve = '1' ORDER BY id ASC" ); while( $row = $db->get_row( $sql ) ) {$post_list[] = $row;} } else $post_list = false; // собираем сведения обо всех одобренных комментариях, если необходимо if ($com_days > 0) { $sql = $db->query( "SELECT id, date, post_id FROM " . PREFIX . "_comments WHERE approve = '1' ORDER BY id ASC" ); while( $row = $db->get_row( $sql ) ) {$comm_list[] = $row;} } else $comm_list = false; // получаем рабочий массив со всеми данными $all_info = CatMenuInit($post_list, $new_days, $comm_list, $com_days); // очищаем память unset($post_list); unset($comm_list); // Формируем массивы скрываемых категорий if ( $hidden != 0 ) $hiddens = explode( ',', $hidden ); else $hiddens = array(); // получаем готовое дерево категорий $cat_menu = CatMenu( 0, $all_info, $new_days, $com_days, $iconimg, $cute, $hiddens ); if ( $mode == 1 ) unset($all_info); // сохраняем в кеш CatMenuSave( 'cat_menu_c'.$copy, $cat_menu ); unset($all_info); }
// вывод меню echo "<ul class=\"cat_menu\" id=\"cat_menu_c".$copy."\">".$cat_menu."</ul>";
?> |
|
|
Суббота, 02.07.2011, 17:25
Пользователь
2Snamp
А если попробовать через запятую в ^ попробовать указать? ID тех, кого скрыть надо. |
Ищу достойных журналистов и файловиков к себе в штаб. Ежедневный просмотр раздела "Вакансии", поиск рабочей силы. Интересен быстрый зароботок копипастом? Пишите в личку. |
|
Суббота, 02.07.2011, 17:31
Проверенный
Kонстантин, ты имеешь ввиду здесь?вместо нуля
Code if ( $hidden != 0 ) $hiddens = explode( ',', $hidden ); |
|
|
Суббота, 02.07.2011, 17:39
Пользователь
Да, там. У меня вывод точ-также сформирован, но в скрытии не нуждаюсь. |
Ищу достойных журналистов и файловиков к себе в штаб. Ежедневный просмотр раздела "Вакансии", поиск рабочей силы. Интересен быстрый зароботок копипастом? Пишите в личку. |
|
Суббота, 02.07.2011, 17:47
Проверенный
Kонстантин, попробывал, результат ноль |
|
|
Суббота, 02.07.2011, 17:58
Пользователь
Пока сам не знаю решения, узнал у автора:
Александр: Если не ошибаюсь, в этом шаблоне стоит другая версия модуля вывода категорий. Я могу вам дать дистрибутив новой версии, где можно исключать категории. Если вы хотите чтобы я его настроил и подогнал, это будет 100 рублей. |
Ищу достойных журналистов и файловиков к себе в штаб. Ежедневный просмотр раздела "Вакансии", поиск рабочей силы. Интересен быстрый зароботок копипастом? Пишите в личку. |
|
Суббота, 02.07.2011, 18:03
Проверенный
Kонстантин, я подумаю и если не ничего не придумаю напишу вам. |
|
|