Drupal → Выносим число материалов из ссылок в меню, которое сгенерировал модуль Taxonomy Menu

10.11.2009

Меню сгенерированное модулем Taxonomy Menu с включённой опцией "Display number of items", выглядит следующим образом:

Задача — вынести число материалов из ссылок, т.е сделать что-то подобное:

2009-11-10_171800.jpg

Смотрится приятней :) Чтобы решить задачу мы добавим свою функцию предварительной обработки блока (preprocess функция), которая будет вызываться при генерации любого блока.

Открываем файл template.php в активной теме и добавляем в него следующий код:

/**
 * Выносим из ссылок число записей
 */
function phptemplate_preprocess_block(&$vars) {
  // обрабатываем только блок с меню, другие блоки не трогаем
  if ($vars['block']->delta == 'menu-category') {
    $vars['block']->content = preg_replace('#>(.*) \((\d+)\)</a>#isU', '>$1</a> ($2)', $vars['block']->content);
  }
}

Системное название меню (delta) можно посмотреть в разделе управления меню, у меня это menu-category

Важно: чтобы функция phptemplate_preprocess_block отрабатывала, нужно чтобы в папке темы лежал файл block.tpl.php, его можно скопировать из темы Garland.

Всё. Очищаем кэш и смотрим результат.

Написанное актуально для
Drupal 6
Похожие записи

Комментарии

Максим
02.03.2010, 17:44

А как тоже самое сделать с меню, которое генерируется Ubercart? Крутил вертел, не получилось ничего. Грешу на системное название этого меню. Я его брал из адресной строки и звучит оно так: uc_catalog

узнать свойство delta у всех блоков можно например так:

function phptemplate_preprocess_block(&$vars){
    echo $vars['block']->delta . '<br />';
}

ну и возможно придётся подправить регулярное выражение, с уберкартом ещё не работал.

Максим
02.03.2010, 20:22

Возможно делаю что-то не то. Никакой реакции код не дал.

block.tpl.php в папке темы есть? кэш обновляли? в качестве шаблонизатора используется phpTemplate?

Максим
02.03.2010, 21:53

Звучит смешно, но все есть. Перепроверил по нескольку раз. Единственное что - шаблрнизатор не использовал. За основу брал тему Garland и ее лопатил

мистика. тогда дебагер в руки и F7, F7, F7... :)

а Garland на phpTemplate сделан, так что всё впорядке

Максим
03.03.2010, 15:00

Будешь смеяться. Я два дня убил на поиски проблемы. Потом случайно зашел на свой второй проект и обнаружен там интересный косяк на страницах в шапке. Оказывается я правил темплейт другого проекта, а проверял первый и результатов конечно не видел :) Перегрелся короче :)
Все заработало! Спасибо.
Правда свойство delta у уберкартовского меню смешное - "0" :)

А если в меню (термин) есть ещё подпункты (подтермин), то у верхнего термина показывается кол-во материалов только для этого термина, не суммируется с количеством материалов его подпунктов (вложенных терминов).

Можно ли это как-то подправить, чтобы было как в меню Уберкарта? Там у родителя показывается общее число материалов всех его подпунктов.

Сразу подумал что регуляркой все разрулится, но ой как не люблю писать регулярки, гуглил готовое решение, нагуглил твое, но твой код в template.php не агрился на delta =\ Возможно они в последних версиях taxonomy menu переписали код слегка.
Ну и так как я в основном блоки вывожу программно, то и тут решил вывести так же и уже вывод блока прокрутить через регулярку, получилось вот что:

$block = module_invoke('menu', 'block', 'view', 'menu-frontmenu');
$block['content'] = preg_replace('#>(.*) \((\d+)\)</a>#isU', '>$1</a> <span>($2)</span>', $block['content']);
echo $block['content'];
Гость
13.06.2013, 02:17

А для седьмого не работает.
Ошибка

Notice: Undefined property: stdClass::$content в названиятемы_preprocess_block() (рядок 12 із /home/misto/public_html/sites/all/themes/названиятемы/template.php).

Гость
12.01.2015, 05:29

Подскажите пожалуйста как для 7-ки это сделать! Очень надо!!!

Добавить комментарий