Добрый день!
На новом проекте поставили задачу сделать меню для объектов на карте следующего вида:
Пункты меню это термины таксономии. Есть тип материала "Объект", в котором выбираются термины категории. Для реализации меню сначала выбрал модуль Taxonomy Menu, но не смог реализовать с ним возможность множественного выбора с checkbox. Пробовал Views + Better Exposed Filters, но не получилось разобраться для реализации выбора пунктов подраздела. Уже третий день разбираюсь сам, видимо нужен новый взгляд на задачу. Нужна помощь либо с настройкой указанных модулей или возможно кто-то знает модуль, который сюда по функционалу больше подойдет.
Вложение | Размер |
---|---|
![]() | 169.05 КБ |
Комментарии
Если модуля нет - то можно написать клевый плагин для вьюса... чтобы он вместо выпадающего списка вываливал такую вот шнягу с чекбоксами.
для тебя самое быстрое-например вывести дерево этим и слать из него отмеченные пункты в аргументы вьюхи.
Плагин для вьюса. А вот с этого момента можно подробнее?
Что именно по-подробнее? Код плагина написать?
Нет, это было бы наглостью с моей стороны, просить код. Но, хотя бы более подробно, как в блок вывести jstree с терминами таксономии?
Тем более этого кода у меня нет..
Можно модуль написать,который будет дергать из бд нужные термины и отрисовывать их в виде html разметки(которую можно выводить в блоке или в контенте), которую понимает jstree. Ну и скрипты этого дерева модуль будет подтягивать.
Подробнее о создании модуля
Спасибо, пока что сделал вывод блока с таким кодом:
<?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. Правда никогда еще такого не делал, если кто может помочь советом, буду рад.
Попробуйте dynatree. Меню он Вам из коробки построит, взять как пример и прикрутить чекбоксы (файлик dynatree.settings.js). На странице модуля есть ссылки на сам плагин dynatree, а там — на документацию к нему. Всё несложно.
Я как-то пробовал и jsTree и dynatree под свои задачи подкрутить, ну и dynatree поудобнее показался. Даже удалось его в Views интегрировать. Да и обновляется, в отличие от jsTree.
Спасибо, поставил dynatree. Отличный plugin и модуль. Вот только до конца так и не смог настроить. Taxonomy menu выводит дерево таксономии, dynatree выводит в нужном виде, при выборе одного термина из списка всё идеально. При выборе нескольких терминов не получается получить url вида mysite/path/tid1,tid2...
Если не ошибаюсь,то в шестерке можно было передать tid1+tid2+tid3 и получить желаемый результат.А в семерке нет.
Это Вам, пожалуй, фильтр надо для Views писать. Раскрытый. Ну и в exposed_form фильтра строить дерево с чекбоксами. В скрипте обрабатывать выбор, добавлять tid'ы в какой-нибудь массив и потом передавать его запросу.