Вывод двухуровневого словаря таксономии + jQuery

Опубликовано 2011.12.27

Термины таксономии в виде ссылок выводятся простым снипетом,даже с количеством привязанных нод. Если словарь двухуровневый-можно поступить следующим образом: Я также сразу закладываю возможность использовать jQuery эффект аккордиона Аргументом функции будет номер вашего словаря. Помещайте эти функции в свой модуль. Можете скачать заготовку модуля. Там есть исходники, потрете в них лишнее и запишите в него только эти 2 функции.
  1. function get_taxonomy_top($vid=2){
  2. echo '<div id="accordion">';
  3. $q=db_select('taxonomy_term_hierarchy','h');
  4. $q->leftJoin('taxonomy_term_data','td','td.tid=h.tid');
  5. $q->condition('td.vid',$vid);
  6. $q->condition('h.parent',0);
  7.  
  8. $q->fields('td',array('name','tid'));
  9.  
  10. $q->orderBy('td.name','asc');
  11. $res=$q->execute();
  12.  
  13. while($rec=$res->fetchAssoc()){
  14. echo '<h3><a href="#">'.$rec['name'].'</a></h3>';
  15. echo '<div>';
  16. get_sub_taxonomy($rec['tid'],$vid);
  17. echo '</div>';
  18. }
  19. echo '</div>';
  20. }
  21.  
  22.  
  23. function get_sub_taxonomy($tid,$vid=2){
  24. $q=db_select('taxonomy_term_hierarchy','h');
  25. $q->leftJoin('taxonomy_term_data','td','td.tid=h.tid');
  26. $q->condition('td.vid',$vid);
  27. $q->condition('h.parent',$tid);
  28.  
  29. $q->addExpression('count(*)','count_nodes');
  30. $q->addExpression('if(i.nid>0,1,0)','est');
  31.  
  32. $q->leftJoin('taxonomy_index','i','i.tid=td.tid');
  33. $q->groupBy('td.name');
  34.  
  35. $q->fields('td',array('name','tid'));
  36. $q->orderBy('td.name','asc');
  37. $res=$q->execute();
  38.  
  39. while($rec=$res->fetchAssoc()){
  40. if($rec['est']==1){$co=$rec['count_nodes'];}else{$co=0;}
  41. $sl_req='/'.drupal_get_path_alias('taxonomy/term/'.$rec['tid']);
  42. if($sl_req==urldecode(request_uri())){
  43. $a_cl='class="acc_ac"';
  44. $a_cl='style="color:#b47e28;font-weight:600;"';
  45. }else{
  46. $a_cl='';
  47. }
  48. echo '&nbsp;&raquo; <a '.$a_cl.' href="'.$sl_req.'">'.$rec['name'].' ('.$co.')</a><br />';
  49. }
  50. }
Создаете блок. Выбираете формат ввода-PHP Помещайте в него:
  1. get_taxonomy_top();
В блоке будет ваш словарь по умолчанию(второй). Если нужно десятый-пишем:
  1. get_taxonomy_top(10);
По серверной части всё...да,у меня часть стилей генерится этим php.Можете вынести всё в css, как и полагается,или настроить под себя. Теперь клиентская часть-аккордеон: В template.php
  1. drupal_add_js('ваш путь/accord.js'); //приложил к статье
  2. drupal_add_js('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js');
  3.  
  4. //Почему то у меня эти стили подтягиваются только под админом.
  5. //заморачиваться не стал-подключил неадминам и анонимам
  6. //если у вас всё работает для анонимов-не дописывайте этот код.
  7. global $user;
  8. if((!$user->uid)or($user->uid<>1)){
  9. drupal_add_css('misc/ui/jquery.ui.core.css');
  10. drupal_add_css('misc/ui/jquery.ui.theme.css');
  11. }
Если вы всё сделали правильно-то получится примерно следующее: Вот и всё..юзайте) пример тут PS Скаченный файл может сменить расширение на txt. Переименуйте у себя в js.