Меню с checkbox на основе таксономии.

Главные вкладки

Аватар пользователя paulzp paulzp 29 ноября 2012 в 13:04

Добрый день!
На новом проекте поставили задачу сделать меню для объектов на карте следующего вида:

Пункты меню это термины таксономии. Есть тип материала "Объект", в котором выбираются термины категории. Для реализации меню сначала выбрал модуль Taxonomy Menu, но не смог реализовать с ним возможность множественного выбора с checkbox. Пробовал Views + Better Exposed Filters, но не получилось разобраться для реализации выбора пунктов подраздела. Уже третий день разбираюсь сам, видимо нужен новый взгляд на задачу. Нужна помощь либо с настройкой указанных модулей или возможно кто-то знает модуль, который сюда по функционалу больше подойдет.

ВложениеРазмер
Иконка изображения menu.png169.05 КБ

Комментарии

Аватар пользователя Chyvakoff Chyvakoff 29 ноября 2012 в 13:28

Если модуля нет - то можно написать клевый плагин для вьюса... чтобы он вместо выпадающего списка вываливал такую вот шнягу с чекбоксами.

для тебя самое быстрое-например вывести дерево этим и слать из него отмеченные пункты в аргументы вьюхи.

Аватар пользователя paulzp paulzp 29 ноября 2012 в 13:52

Нет, это было бы наглостью с моей стороны, просить код. Но, хотя бы более подробно, как в блок вывести jstree с терминами таксономии?

Аватар пользователя Chyvakoff Chyvakoff 29 ноября 2012 в 16:12

Тем более этого кода у меня нет..

Можно модуль написать,который будет дергать из бд нужные термины и отрисовывать их в виде html разметки(которую можно выводить в блоке или в контенте), которую понимает jstree. Ну и скрипты этого дерева модуль будет подтягивать.
Подробнее о создании модуля

Аватар пользователя paulzp paulzp 29 ноября 2012 в 17:32

Спасибо, пока что сделал вывод блока с таким кодом:

<?php
function d7_taxonomy_term_count_nodes($tid){
    
$query db_select('taxonomy_term_data''t');
    
$query->join('taxonomy_index''i''i.tid = t.tid');
    
$query->addField('i''nid');
    
$query->condition('t.tid'$tid);
    
$query->addTag('node_access');
    
$tids $query->execute()->fetchCol();
    return 
count($tids);
}
 
$vid 2/* <---- put correct vocabulary ID here */
$terms taxonomy_get_tree($vid);
print 
"<ul>";
foreach ( 
$terms as $term ) {

$tcount d7_taxonomy_term_count_nodes($term->tid);
$children_terms taxonomy_get_children($term->tid);
if (
$term->depth == 0) {
print 
"<li>";
print 
l($term->name." (".$tcount.")",'taxonomy/term/'
.$term->tid, array('title' => $tcount." posts in "
.$term->name));
if (
$children_terms) {
print 
"<ul>";
foreach ( 
$children_terms as $children_term ) {
$t_children_count 
d7_taxonomy_term_count_nodes($children_term->tid);
print 
"<li>";
print 
l($children_term->name." (".$t_children_count.")",
'taxonomy/term/'.$children_term->tid, array('title' =>
 
$t_children_count." posts in ".$children_term->name));
print 
"</li>";
}
/* end foreach children */
print "</ul>";
}
print 
"</li>";
}
/* end foreach */
print "</ul>";
?>

В блоке выводится иерархия словаря с кол-ом материалов по термину. Теперь буду пытаться все это интегрировать с плагином CHECKBOX PLUGIN. Правда никогда еще такого не делал, если кто может помочь советом, буду рад.

Аватар пользователя ser_house ser_house 29 ноября 2012 в 18:38

Попробуйте dynatree. Меню он Вам из коробки построит, взять как пример и прикрутить чекбоксы (файлик dynatree.settings.js). На странице модуля есть ссылки на сам плагин dynatree, а там — на документацию к нему. Всё несложно.

Я как-то пробовал и jsTree и dynatree под свои задачи подкрутить, ну и dynatree поудобнее показался. Даже удалось его в Views интегрировать. Да и обновляется, в отличие от jsTree.

Аватар пользователя paulzp paulzp 3 декабря 2012 в 18:42

Спасибо, поставил dynatree. Отличный plugin и модуль. Вот только до конца так и не смог настроить. Taxonomy menu выводит дерево таксономии, dynatree выводит в нужном виде, при выборе одного термина из списка всё идеально. При выборе нескольких терминов не получается получить url вида mysite/path/tid1,tid2...

Аватар пользователя Chyvakoff Chyvakoff 4 декабря 2012 в 13:17

"paulzp" wrote:
При выборе нескольких терминов не получается получить url вида mysite/path/tid1,tid2...

Если не ошибаюсь,то в шестерке можно было передать tid1+tid2+tid3 и получить желаемый результат.А в семерке нет.

Аватар пользователя ser_house ser_house 4 декабря 2012 в 15:00

Это Вам, пожалуй, фильтр надо для Views писать. Раскрытый. Ну и в exposed_form фильтра строить дерево с чекбоксами. В скрипте обрабатывать выбор, добавлять tid'ы в какой-нибудь массив и потом передавать его запросу.