Вывод всех меток в виде дерева для сайта на MaxSite CMS
Вывод всех меток в виде дерева для сайта на MaxSite CMS
В предыдущей статье на эту тему Вывод меток сайта деревом я пытался придумать алгоритм, отображающий метки сайта в виде дерева на основе связей между метками по записям.
Но есть другой вариант.
Можно использовать для группировки меток группировку статей, которым присвоены метки, по категориям. Например: http://filsadovnik.ru/all_tags.
Итак, мы получаем все категории и затем, для каждой категории, находим множество всех меток, которые присвоены статьям, принадлежащим данной категории.
Есть разные варианты отображения. Например, метки, отображаемые у родительской категории уже могут не отображаться у дочерних; можно использовать древообразное представление или нет; и т. д.
Получить древообразный массив категорий мы можем при помощи функции mso_cat_array.
Вид полученного массива будет следующий.
- [15] = Array(
- [category_id] = 15
- [category_id_parent] = 0
- [category_type] = page
- [category_name] = Тестовая рубрика
- [category_desc] =
- [category_slug] = test
- [category_menu_order] = 0
- [pages_count] = 2
- [childs] =Array (
- [16] = Array ( [category_id] =16 )
- [17] = Array ( [category_id] =17 )
Функция получится следующая.
- function tags2categoryout($all = array() , $par = array())
- {
- $out = '';
- foreach ($all as $a)
- {
- $CI = & get_instance();
- $CI->db->select('category.category_name , meta_value, COUNT(meta_value) AS meta_count');
- $CI->db->where('category.category_type', 'page');
- $CI->db->where('category.category_id', $a['category_id']);
- $CI->db->where( array ( 'meta_key' => 'tags', 'meta_table' => 'page' ) );
- $CI->db->join('page', 'page.page_id = meta.meta_id_obj' );
- $CI->db->group_by('meta_value');
- $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id');
- $CI->db->join('category', 'cat2obj.category_id = category.category_id');
- //$CI->db->join('page', 'page.page_id = cat2obj.page_id', 'left');
- if ($query = $CI->db->get('meta')) $result = $query->result_array(); // здесь все
- else $result = array();
- $out .= '<H2><a href ="' . getinfo('site_url') . 'category/' . $a['category_slug'] . '">' . $a['category_name'] . '</a></H2>';
- $i=false;
- foreach ($result as $tag)
- {
- if ($i) $out .= ' , '; else $i=true;
- $out .= '<a href ="' . getinfo('site_url') . 'tag/' . $tag['meta_value'] . '">' . $tag['meta_value'] . '<sup>' . $tag['meta_count'] . '</sup></a>' ;
- }
- if (isset ($a['childs']) and $a['childs']) $out .= tags2categoryout($a['childs'] , $par);
- }
- return $out;
- }
Поскольку, функция получения дерева рубрик ресурсоемкая - не забываем о кешировании.
Файл, готовый для использования находится в архиве.
Заливаем этот файл в templates/my_template/type/ и наблюдаем результат по адресу, соответствующему имени файла, например: http://filsadovnik.ru/all_tags.
mso_get_pages и типы данных в MaxSite CMS: что это и как эти штуки связанны.
Вопрос, который можно считать классическим: Я хочу, чтобы статьи в обратном ...
Добавление полей Сайт и Ник в форму комментирования для комюзеров в MaxSite CMS
В статье пойдет речь о том, как и зачем добавить в форму комментирования ...
Страница-форма регистрации для MaxSite CMS
В MaxSite CMS есть два вида пользователей: users и comusers, информация о которых ...
Классификация пользоательских метаполей и способов их вывода для MaxSite CMS.
MaxSite CMS позволяет к существующим полям страницы добавлять произвольные ...
MaxSite плагин ABC-catalog 1.1.
Добавил некоторые возможности. Архив плагина: abc_catalog-1-1.zip Раньше настоящий ...











Очень класс. Буду делать!
Благодарности.
Не получится, буду беспокоить.
www. заработает выложу