Сниппет: выводим все пункты подменю "Создать" в отдельном блоке

Главные вкладки

Аватар пользователя VladSavitsky VladSavitsky 22 февраля 2008 в 0:41

Задача:
В меню "Навигация" есть подпункт "Создать" (или "Создать материал").
Нужно в отдельном блоке вывести его содержимое.

Решение:
1. Можно создать блок, где вручную прописать ссылки на нужные страницы. Будет быстро работать, но при добавлении новых пунктов нужно будет руками вносить изменения каждый раз. Не подходит!
2. Поискать модуль, который создаст нужный блок. Поискал, но не нашёл модуль, который бы дал возможность выводить именно подменю опред. уровня. Вот очень хороший обзор модулей для работы с меню от PVasili: Модули :: Меню.
3. Написать сниппет, который выведет нужное подменю и оно будет всегда актуально. Этот вариант и будем прорабатывать.

Реализация идеи:
Не буду описывать все источники и все испробованные варианты - опишу результат. Создаём блок и вставляем код:
<?php
$menu= db_fetch_object(db_query("SELECT mid FROM {menu} AS m WHERE m.title='Create content' LIMIT 1"));
print(theme('menu_tree', $menu->mid));
?>

Вот и всё. Можно глянуть ещё одно решение: "Управление. Список пунктов определённого раздела меню".

Всё должно быть просто и красиво.

ВложениеРазмер
Иконка изображения submenu-block.png14.64 КБ

Комментарии

Аватар пользователя VladSavitsky VladSavitsky 22 февраля 2008 в 11:06

Я так в начале и сделал, но на другой установке друпала оказалось что нужный пункт имеет другой номер. Поэтому это универсальное решение, а дальше нужно немного "доработать по месту напильником"...

Аватар пользователя Химический Али Химический Али 8 марта 2008 в 15:46

VladSavitsky wrote:
Я так в начале и сделал, но на другой установке друпала оказалось что нужный пункт имеет другой номер. Поэтому это универсальное решение, а дальше нужно немного "доработать по месту напильником"...

думаю, это не проблема, т.к. наверняка этот код будет изменяться очень редко (если вообще будет)

Аватар пользователя VladSavitsky VladSavitsky 24 февраля 2008 в 17:43

НовичОК, если вставляется код на РНР, то его нужно обрамлять тегами <?php ... ?>.
Просто на этом сайте при отображении когда на РНР скрываются эти теги, но делается подсветка синтаксиса...

А чтобы был префикс - нужно имя таблицы заключить в фигурные скобки: {} - я исправил код в статье. Спасибо!

Аватар пользователя VladSavitsky VladSavitsky 26 февраля 2008 в 18:01

Если страница не содержит даже шапки, то это ошибка в скрипте. Идите в журнал и ищите последнее сообщение об ошибке.
Если шапка и др. текст на странице есть, а нет текста именно ноды, то скрипт работает нормально и это его результат работы.

Аватар пользователя Valeratal Valeratal 27 февраля 2008 в 9:36

Если шапка и др. текст на странице есть, а нет текста именно ноды, то скрипт работает нормально и это его результат работы.

Ну да, текста ноды нет
А, эмм, что понимать под "результат его работы" - девственно чистый лист?

Аватар пользователя VladSavitsky VladSavitsky 2 марта 2008 в 19:16

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

Решения:
1. Дополнить скрипт проверкой (домашняя работа) того факта, что результат получен из базы данных.
2. Открыть базу и посмотреть номер нужного пункта меню и вписать его вручную вместо $menu->mid. Если после этого вы не получите результат - читайте API к вашей версии друпала на предмет изменения параметров функции theme()

Аватар пользователя Алексей Дёмин Алексей Дёмин 13 марта 2008 в 8:44

А если сделать новое меню, и перенести пункт Создать материал в него?
При этом будут корректно работать такие модули как DHTML menu, но из меню Навигация он пропадет.
ИМХО такой метод "зеленее" Smile

Аватар пользователя listai listai 10 сентября 2009 в 16:00

Интересный блок, у меня следующее выдал
user warning: Table 'kitsystem_site.menu' doesn't exist query: SELECT mid FROM menu AS m WHERE m.title='Create content' LIMIT 1 in /home/k/kitsystem/public_html/includes/common.inc(1655) : eval()'d code on line 2.

Как это исправить, подскажите что исправить...