Skip to Content

Делаем навигационное меню рубрикатор для блога на Drupal

Расскажу о наиболее простом, на мой взгляд, способе создания вертикального меню рубрикатора для блога на Drupal с отображением количества постов в каждой из категорий (такой рубрикатор можно наблюдать на нашем блоге справа). Вам не понадобится ставить ни одного дополнительного модуля. Метод основан на использовании базового модуля Taxonomy, иначе говоря, на стандартных тегах.

Заходим в раздел администрирования "Конструкция сайта->Блоки" ("Site Building->Blocks"). Там нажимаем на вкладку добавления нового блока. В поле "Описание блока" вводим понятное нам название для отображение в админке, например, "Рубрикатор". Задаем заголовок блока, видимый для пользователей, и вставляем следующий код в текст блока:

<div class="rubricator">
<?php
$node_type = "blog"; //тип ноды
$vocabulary_id = 1 ; //номер словаря тегов
$number=10; //количество разделов в рубрикаторе
$result = db_query_range("SELECT d.tid, d.name, MAX(n.created) AS updated,
COUNT(*) AS count FROM {term_data} d INNER JOIN {term_node} USING (tid)
INNER JOIN {node} n USING (nid) WHERE d.vid = %d AND
n.status = 1 AND n.type = '%s' GROUP BY d.tid, d.name ORDER BY
COUNT DESC "
, $vocabulary_id, $node_type, 0, $number);
$items = array();
while ($category = db_fetch_object($result)) {
$items[] = l($category->name , 'taxonomy/term/'. $category->tid).' ('. $category->count .')' ;
}
print theme('item_list', $items);
?>
</div>

Небольшой комментарий к коду: переменная $node отвечает за тип ноды, для записей блога необходимо оставить ей значение "blog", как в примере. $vocabulary_id - это номер словаря тегов, который будет использован для нашего рубрикатора. Посмотреть этот номер можно в разделе админки "Содержание->Таксономия" ("Content->Taxonomy") - наведите мышкой на словарь и в конце ссылке увидете его номер. Если вы не создавали больше одного словаря, то скорее всего его номер "1".
Ну и переменная $number отвечает за количество разделов в создаваемом меню, в примере, как видим, их 10.

Далее надо не забыть выставить правильный фильтр в подразделе "Формат ввода", иначе введенный код не будет интерпретироваться Drupal-ом. Нам необходимо указать "PHP Code" фильтр. Если у вас его нет в списке, то следует зайти на страничку модулей и включить стандартный модуль "PHP Filter".

Теперь жмём "Сохранить блок", указываем его местоположение на странице управления блоками и, собственно, готово. У нас получился блок, отображающий разделы, основанные на ваших тегах, прикрепленных к статьям, и количество постов в этих разделах. Можно применить к нему стили, использовав класс div-а контейнера "rubricator".

Комментарии

taxonomy_menu may be?

taxonomy_menu may be?

Можно и через Taxonomy Menu.

Можно и через Taxonomy Menu. Можно и через Views. Мне нравится описанный метод тем, что не требует никаких сторонних модулей - просто создаёшь блок и копипастишь туда код.

а чего db_query так

а чего db_query так по-детски неправильно оформлен? может переменные лучше в аргументы переместить?

Это всё от лени и

Это всё от лени и безответственности! Долой раздолбайство! Поправила.

Во-первых ошибка: есть --

Во-первых ошибка:
есть -- COUNT DESC LIMIT %d", $vocabulary_id, $node_type,$node_type);
надо -- COUNT DESC LIMIT %d", $vocabulary_id, $node_type,$number);

Во-вторых, если уж мы тут педантами заделались, надо вместо LIMIT юзать db_query_range:

$sql = "
  SELECT
    d.tid, d.name,
    MAX(n.created) AS updated,
    COUNT(*) AS count
  FROM {term_data} d
  INNER JOIN {term_node} USING (tid)
  INNER JOIN {node} n USING (nid)
  WHERE
    d.vid = %d
    AND n.status = 1
    AND n.type = '%s'
  GROUP BY d.tid, d.name
  ORDER BY COUNT DESC"
;

$result = db_query_range(db_rewrite_sql($sql), $vocabulary_id, $node_type, 0, $number);

Всё верно, спасибо за

Всё верно, спасибо за поправки. db_query_range вообще очень правильная вещь - Александр, например, её постоянно использует, и меня, когда забываю, обычно пинает Smile

+1. Это само-собой

+1. Это само-собой подразумевалось Wink

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Smileys
:):D:bigsmile:;):p:O:|:(:~:((8):steve:J):glasses::party::love:
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <span> <div> <h2> <h3>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.
  • Image links with 'rel="lightbox"' in the <a> tag will appear in a Lightbox when clicked on.
  • Image links from G2 are formatted for use with Lightbox2
  • Textual smileys will be replaced with graphical ones.
  • You may insert videos with [video:URL]

Подробнее о форматировании

Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated.