Здравствуйте уважаемые!
Как часто хочется добавить в меню пункт "Редактировать профиль" или "Мой трекер", но стандартные средства Друпала не позволяют это сделать (возможно плохо искал) и приходится писать код или смириться с невозможность вывести эти пункты меню.
Сегодня в голову пришла идея, попробовал и получилось! Не сочтите извращенцем, но я добавил эти пункты напрямую через базу.
Описываю шаги:
- Заходим в базу MySQL
- Жмем ссылку SQL (см. скрин)
- В текст запроса вставляем текст из файла menu_create.sql
- Жмем ОК
- Если ошибок не было, то заходим на свой сайт в Secondary menu
- Очищаем кеш (опционально)
- Готово!
Помимо ссылки "Редактировать профиль" создаются еще несколько ссылок, если не используете модули, выводящие эти ссылки в профиле пользователя - просто удалите их из Secondary menu обычным способом.
ЗЫ: при импорте в базу может выпасть сообщение о невозможности создания индекса - это значит, что меню с индексами, которые я прописал в sql-файле (50001, 50002, ...) уже имеются в базе, выход - отредактировать menu_create.sql.
Вложение | Размер |
---|---|
attach.zip | 50.98 КБ |
screen.jpg | 67.12 КБ |
Комментарии
Что за очередной кривой велосипед, я не пойму??? В админке все превосходно добавляется без всяких этих SQL. А если так уж важно программным путем добавить, то стоит прочитать про hook_menu()
Посвятите как? Как мне добавить ссылку на мой трекер в Primary menu например?
Во первых, не Primary menu, а все таки Primary links наверное?
Во вторых,
А у меня вот так!
Может какой-то модуль не стоит?
естественно нет такого адреса, это я для примера вставил. Вы же тот адрес, который вам нужен вставляйте.
Да уж... это же гениально! Остается только при регистрации нового пользователя на сайте лезть в админку и создавать ему линк на его трекер... спасибо.. не надо мне таких "стандартных" способов...
Ничего подобного. Здесь же вон на Drupal.Ru на "Мой трекер" ниче не создается.
В любом случае писать напрямую в SQL-базу неправильно.
Ну если Вы не заметили, то здесь Мой трекер выводится не через меню, а в блоке - написать там PHP-код не составляет труда...
В общем, нашел альтернативный вариант решения вопроса - me aliases - ставим и радуемся ))
Тема закрыта.
Топикстартер имел ввиду, что ссылку с аргуметном, типа user/%/edit из админки не вставить.
Кстати, я все же именно через правку БД вставил такие линки в меню )) т.к. модуль me aliases не работает нормально со вьюхами.
Посмотреть можно здесь www.bacart.ru.
Я думал что то интересное раз на главной.
А здесь оказывается кривые советы раздают.
Ок! Кривые говорите... Тогда жду Ваш "прямой" способ создания пункта меню user/%/tracker. Может напишете модуль? Просто интересно.
Создаете вьюху, а в качестве дефолтного аргумента используете id текущего пользователя.
А вообще трекеру давно пора умереть.
Простите, а куда вы потом засунете Ваш user/%/tracker ???
И что это за пользователь такой %, на сколько я знаю это знак процента и он не относится ни к цифрам, ни к числам.
Вьюхой создать трекер проблем нет. Вы пробовали сделать такое:
И что у Вас вышло? Правильно! Ничего. Потому что даже вьюха не может создать ссылку в меню с адресом user/%/track.
Хоть это и некрасиво, но отвечу вопросом на вопрос - Вы читали заголовок темы обсуждения?
Уууу.... вот и родились "программисты", делающие все мышкой через интерфейс и даже не заглядывающие в БД! Апокалипсис близок.
Вот раз: http://drupal.org/project/mail_ru
вот два: http://drupal.org/project/openlogin
я бы вам советовал развивать свой кругозор и слушаться старших.
За ссылки отдельное спасибо! Вижу авторство Ваше. Даже поставлю сейчас себе - попробую.
Ну что ж. Давайте развивать кругозор друг друга. По поводу вопроса про % отвечу как программист программисту ))
В БД друпала знак % используется для обозначения ID текущего пользователя. При установке друпал создает несколько ссылок в меню Навигация, доступных только для чтения, например My account (см. приложение), которые как раз предназначены для перехода на страницы, в адресе которых присутствует ID текущего пользователя.
Мне (как думаю и многим) не хватило тех линков, которые дает друпал изначально, поискав доступные решения пришел к выводу, что будет проще пойти путем самого друпала и безо всяких хуков и т.п. просто добавить в базу пункты меню.
Есть неплохой модуль me aliases, но мне (как и многим другим) он не подошел по той причине, что некорректно работает с views.
И снова вопрос: если мой способ, который отнюдь не претендует на единственно правильное решение, по вашему мнению крив, то какое решение предложите Вы?
Это мягко говоря неверная информация. Вы заблуждаетесь.
Кто сказал, что это именно ID пользователя, а не ноды например или комментария?
Вообще % имеет смысл использовать только программно в hook_menu() модуля т.к. % вызывает специальную загрузочную функцию, которая загружает либо объект $user, либо объект $node либо еще чего другое и передает в качестве аргумента в коллбэк функцию. Что будет загружено в Вашем случае, когда Вы руками вставляете это в базу я затрудняюсь сказать.
И еще второй момент. Откуда знать Друпалу, что в ссылку user/%/track нужно вставлять именно ID пользователя, а может быть ID просматриваемой ноды? Про валидацию я вообще молчу.
Правильное решения я уже называл.
Создаете вьюху с аргументом ID пользователя. В качестве дефолтного задаете ID текущего пользователя.
См. картинку
Ок! Как вставить ссылку на эту вьюху в меню?!
Создайте Page display
Дай ссылку на эту вьюху БЕЗ АРГУМЕНТОВ
например: http://site.name/mytracker
если все условия заданы правильно, то при отсутствии аргументов в качестве дефолтного будет использован ID просматривающего пользователя.
Имеется вьюха, путь user/%/track.
Захожу в меню, создаю новый пункт.
Пробовал user/%/track, user/track, usertrack. Естественно система говорит - такого пути не существует.
Что предлагаете указать в пути?
Вместо % вставляйте Wildcard только поменяйте дефолтную "all" на хотя бы "my", ну и заголовок смените с "Все" на "Мой"
У Вас будет "user/my/track"
только задайте в настройках аргумента wildcard на "my"
Честно, пробовал следовать Вашему совету - не получилось.
Давайте попробуем так:
На Views 6.x-2.11 создал представление Test, экспортировал в файл, который и прикрепляю, если будет свободное время и желание - пожалуйста внесите в него изменения, о которых писали выше. Заранее благодарю ))
Мда ....
Поставьте еще 10 модулей, чтобы создать пункт меню
Смотрим hook_menu в модуле user:
'title' => 'My account',
'title callback' => 'user_page_title',
'title arguments' => array(1),
'page callback' => 'user_view',
'page arguments' => array(1),
'access callback' => 'user_view_access',
'access arguments' => array(1),
'parent' => '',
'file' => 'user.pages.inc',
);
Не смущает %user_uid_optional ?
Смотрим http://api.drupal.org/api/search/6/to_arg, примеры основательно.
Теперь трекер:
$items['tracker/%user_uid_optional'] = array(
'title' => 'My recent posts',
'access callback' => '_tracker_myrecent_access',
'access arguments' => array(1),
'page arguments' => array(1),
'type' => MENU_LOCAL_TASK,
);
Как видим, "мой трекер" уже создан и работает ;). Единственное замечание: путь в админке следует вводить так tracker/%
Модуль privatemsg тоже имеет готовый путь для своих сообщений: messages.
Для других линков придеться немного поработать, так как нужного нам пути в системе нет (например user/%user_uid_optional/edit).
Но если его создать самим, проблемы не будет (так как системный путь тоже принимает объект $user).
Но такой трюк не работае з privatemsg, так как оригинальная ф-ия принимает uid, а не объект $user. В этом случае надо через menu_alter перекрыть стандартный сallback
Можно и view создавать и передавать default argument, как было написано ранее. Но в этом случае поламаються табы (например путь messages - ведёт на собстенную страницу, других юзер табов нету - с view будет то самое).
Облизательно
Мне уже нуно ))
Конструктор "Сделай САМ!"