Вывод отдельного списка терминов каждого из словарей документа

19 Июн 2008
Опубликовано VladSavitsky
Задача: 

На сайте есть несколько словарей таксономии (Например, "Исполнитель", "Альбом", "Год").
Нужно вывести теги каждого словаря отдельно так:

  • Исполнитель: тег1, тег2, тег3
  • Альбом: тег1, тег2,
  • Год: тег1, тег2,

По умолчанию Друпал выводит все теги документа вместе и не разделяет на словари. Чтобы это изменить нужно внести изменения в шаблон документа.

Решение:
Изменения вносятся в файлах node.tpl.php и остальных файлах node-*.tpl.php, если это необходимо. Эти файлы находятся в папке текущей темы сайта.

Найти этот код (обычно в начале файла):

if ($terms) { ?><div class="taxonomy"><?php print $terms ?></div><?php }

Заменить на:

<?php if (!$teaser)  print $terms_by_vocabulary ?>

В файле template.php:

/**
 * Override or insert variables into the node templates.
 *
 * @param $vars
 *   An array of variables to pass to the theme template.
 * @param $hook
 *   The name of the template being rendered ("node" in this case.)
 */

function THEMENAME_preprocess_node(&$vars, $hook) {
  if ($hook=='node') {

    $sql = "SELECT v.vid, v.name as voc_name, td.tid, td.name AS tag_name
            FROM {vocabulary} AS v
              INNER JOIN {term_data} AS td USING (vid)
              INNER JOIN {term_node} AS tn USING (tid)
              INNER JOIN {node} AS n USING (nid)
            WHERE n.nid=%d
            GROUP BY td.tid
            ORDER BY v.vid"
;
    $result = db_query(db_rewrite_sql($sql), $vars['nid']);
    $categories=array();
    while ($category=db_fetch_object($result))  {
      $voc[$category->name]=$category->vid;
      $categories[$category->name] .= '<li class="taxonomy_term_'.$category->tid.'">'. l($category->tname , 'taxonomy/term/'. $category->tid, array('rel'=>'tag', 'title'=>'', 'class'=>'taxonomy_term_'.$category->tid)). ', </li>';

    }
    if (count($categories)>0) {
      foreach ($categories as $cat_name=>$cat_terms) {
        $vars['terms_by_vocabulary'].='<div class="vocabularies voc_'.$voc[$cat_name].'">'.$cat_name.': <ul class="links inline">'.$cat_terms.'</ul></div>';
      }
    }
  }
}

Темизация

Вывод терминов (тегов) горизонтально и вертикально

Вывод в одну строку (горизонтально) обеспечивается CSS-правилом из system-menus.css (строка 39):

ul.links.inline {display:inline;}

Чтобы вывести вертикальный список, нужно добавить в конец файла style.css правило:
ul.links.inline {display:block;}

Темизация отдельного термина

Для каждого термина формируется своё название класса и можно настроить каждый тег отдельно. Можно, например, добавить значок тега, поменять цвет, размер, шрифт, положение и прочее, что позволяет CSS.
Например для тега:

<li class="taxonomy_term_3">
  <a href="/avtory-reshenii/vladsavitsky">VladSavitsky</a>
</li>

Нужно использовать CSS-правило:
li.taxonomy_term_3 {color:orange;}

Темизация отдельного словаря

Словарь обёрнут тегами и есть класс, который привязан к ID словаря:

<div class="vocabularies voc_3">...</div>

Поэтому можно изменить вид каждого отдельного словаря:

.voc_3 {color:orange;}

Полезные ссылки

Авторы решений:
Версия Drupal:
Спонсор:
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>