Способ создания пункта меню "Редактировать личные данные" или "Мой трекер"

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

Аватар пользователя Alex Bacart Alex Bacart 12 октября 2010 в 14:34

Здравствуйте уважаемые!

Как часто хочется добавить в меню пункт "Редактировать профиль" или "Мой трекер", но стандартные средства Друпала не позволяют это сделать (возможно плохо искал) и приходится писать код или смириться с невозможность вывести эти пункты меню.

Сегодня в голову пришла идея, попробовал и получилось! Не сочтите извращенцем, но я добавил эти пункты напрямую через базу.

Описываю шаги:

  1. Заходим в базу MySQL
  2. Жмем ссылку SQL (см. скрин)
  3. В текст запроса вставляем текст из файла menu_create.sql
  4. Жмем ОК
  5. Если ошибок не было, то заходим на свой сайт в Secondary menu
  6. Очищаем кеш (опционально)
  7. Готово!

Помимо ссылки "Редактировать профиль" создаются еще несколько ссылок, если не используете модули, выводящие эти ссылки в профиле пользователя - просто удалите их из Secondary menu обычным способом.

ЗЫ: при импорте в базу может выпасть сообщение о невозможности создания индекса - это значит, что меню с индексами, которые я прописал в sql-файле (50001, 50002, ...) уже имеются в базе, выход - отредактировать menu_create.sql.

ВложениеРазмер
Иконка пакета attach.zip50.98 КБ
Иконка изображения screen.jpg67.12 КБ

Комментарии

Аватар пользователя Softovick Softovick 12 октября 2010 в 15:33

Что за очередной кривой велосипед, я не пойму??? В админке все превосходно добавляется без всяких этих SQL. А если так уж важно программным путем добавить, то стоит прочитать про hook_menu()

Аватар пользователя Alex Bacart Alex Bacart 12 октября 2010 в 15:38

"Softovick" wrote:
В админке все превосходно добавляется без всяких этих SQL.

Посвятите как? Как мне добавить ссылку на мой трекер в Primary menu например?

Аватар пользователя Softovick Softovick 12 октября 2010 в 15:47

Vydrin_AP wrote:
Посвятите как? Как мне добавить ссылку на мой трекер в Primary menu например?

Во первых, не Primary menu, а все таки Primary links наверное?
Во вторых,

Аватар пользователя Softovick Softovick 12 октября 2010 в 15:57

Vydrin_AP wrote:
А у меня вот так!

Может какой-то модуль не стоит?


естественно нет такого адреса, это я для примера вставил. Вы же тот адрес, который вам нужен вставляйте.

Аватар пользователя Alex Bacart Alex Bacart 12 октября 2010 в 16:01

Да уж... это же гениально! Остается только при регистрации нового пользователя на сайте лезть в админку и создавать ему линк на его трекер... спасибо.. не надо мне таких "стандартных" способов...

Аватар пользователя Softovick Softovick 12 октября 2010 в 16:11

Vydrin_AP wrote:
Да уж... это же гениально! Остается только при регистрации нового пользователя на сайте лезть в админку и создавать ему линк на его трекер... спасибо.. не надо мне таких "стандартных" способов...

Ничего подобного. Здесь же вон на Drupal.Ru на "Мой трекер" ниче не создается.
В любом случае писать напрямую в SQL-базу неправильно.

Аватар пользователя Alex Bacart Alex Bacart 12 октября 2010 в 16:19

Ну если Вы не заметили, то здесь Мой трекер выводится не через меню, а в блоке - написать там PHP-код не составляет труда...
В общем, нашел альтернативный вариант решения вопроса - me aliases - ставим и радуемся ))
Тема закрыта.

Аватар пользователя Alex Bacart Alex Bacart 8 ноября 2010 в 14:51

Кстати, я все же именно через правку БД вставил такие линки в меню )) т.к. модуль me aliases не работает нормально со вьюхами.
Посмотреть можно здесь www.bacart.ru.

Аватар пользователя Alex Bacart Alex Bacart 8 ноября 2010 в 17:03

"seaji" wrote:
А здесь оказывается кривые советы раздают.

Ок! Кривые говорите... Тогда жду Ваш "прямой" способ создания пункта меню user/%/tracker. Может напишете модуль? Просто интересно.

Аватар пользователя seaji seaji 8 ноября 2010 в 17:46

Создаете вьюху, а в качестве дефолтного аргумента используете id текущего пользователя.

А вообще трекеру давно пора умереть.

"Vydrin_AP" wrote:
Тогда жду Ваш "прямой" способ создания пункта меню user/%/tracker

Простите, а куда вы потом засунете Ваш user/%/tracker ???

И что это за пользователь такой %, на сколько я знаю это знак процента и он не относится ни к цифрам, ни к числам.

Аватар пользователя Alex Bacart Alex Bacart 8 ноября 2010 в 18:54

"seaji" wrote:
Создаете вьюху, а в качестве дефолтного аргумента используете id текущего пользователя.

Вьюхой создать трекер проблем нет. Вы пробовали сделать такое:

  1. Создаем вьюху с аргументом id текущего пользователя и указываем Адрес = user/%/track
  2. В настройке этой же вьюхи указываем Меню = Обычный пункт меню в основных ссылках

И что у Вас вышло? Правильно! Ничего. Потому что даже вьюха не может создать ссылку в меню с адресом user/%/track.

"seaji" wrote:
Простите, а куда вы потом засунете Ваш user/%/tracker ???

Хоть это и некрасиво, но отвечу вопросом на вопрос - Вы читали заголовок темы обсуждения?

"seaji" wrote:
И что это за пользователь такой %, на сколько я знаю это знак процента и он не относится ни к цифрам, ни к числам.

Уууу.... вот и родились "программисты", делающие все мышкой через интерфейс и даже не заглядывающие в БД! Апокалипсис близок.

Аватар пользователя seaji seaji 8 ноября 2010 в 21:32

"Vydrin_AP" wrote:
Уууу.... вот и родились "программисты", делающие все мышкой через интерфейс и даже не заглядывающие в БД! Апокалипсис близок.

Вот раз: http://drupal.org/project/mail_ru
вот два: http://drupal.org/project/openlogin

я бы вам советовал развивать свой кругозор и слушаться старших.

Аватар пользователя Alex Bacart Alex Bacart 10 ноября 2015 в 11:47

За ссылки отдельное спасибо! Вижу авторство Ваше. Даже поставлю сейчас себе - попробую.

"seaji" wrote:
я бы вам советовал развивать свой кругозор и слушаться старших.

Ну что ж. Давайте развивать кругозор друг друга. По поводу вопроса про % отвечу как программист программисту ))
В БД друпала знак % используется для обозначения ID текущего пользователя. При установке друпал создает несколько ссылок в меню Навигация, доступных только для чтения, например My account (см. приложение), которые как раз предназначены для перехода на страницы, в адресе которых присутствует ID текущего пользователя.

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

Есть неплохой модуль me aliases, но мне (как и многим другим) он не подошел по той причине, что некорректно работает с views.

И снова вопрос: если мой способ, который отнюдь не претендует на единственно правильное решение, по вашему мнению крив, то какое решение предложите Вы?

Аватар пользователя seaji seaji 10 ноября 2015 в 11:47

"Vydrin_AP" wrote:
В БД друпала знак % используется для обозначения ID текущего пользователя.

Это мягко говоря неверная информация. Вы заблуждаетесь.
Кто сказал, что это именно ID пользователя, а не ноды например или комментария?

Вообще % имеет смысл использовать только программно в hook_menu() модуля т.к. % вызывает специальную загрузочную функцию, которая загружает либо объект $user, либо объект $node либо еще чего другое и передает в качестве аргумента в коллбэк функцию. Что будет загружено в Вашем случае, когда Вы руками вставляете это в базу я затрудняюсь сказать.

И еще второй момент. Откуда знать Друпалу, что в ссылку user/%/track нужно вставлять именно ID пользователя, а может быть ID просматриваемой ноды? Про валидацию я вообще молчу.

Правильное решения я уже называл.
Создаете вьюху с аргументом ID пользователя. В качестве дефолтного задаете ID текущего пользователя.
См. картинку

Аватар пользователя seaji seaji 9 ноября 2010 в 16:09

Дай ссылку на эту вьюху БЕЗ АРГУМЕНТОВ

например: http://site.name/mytracker

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

Аватар пользователя Alex Bacart Alex Bacart 9 ноября 2010 в 16:20

Имеется вьюха, путь user/%/track.
Захожу в меню, создаю новый пункт.
Пробовал user/%/track, user/track, usertrack. Естественно система говорит - такого пути не существует.
Что предлагаете указать в пути?

Аватар пользователя seaji seaji 9 ноября 2010 в 17:05

"Vydrin_AP" wrote:
Имеется вьюха, путь user/%/track.

Вместо % вставляйте Wildcard только поменяйте дефолтную "all" на хотя бы "my", ну и заголовок смените с "Все" на "Мой"

У Вас будет "user/my/track"

только задайте в настройках аргумента wildcard на "my"

Аватар пользователя Alex Bacart Alex Bacart 10 ноября 2015 в 11:47

Честно, пробовал следовать Вашему совету - не получилось.
Давайте попробуем так:
На Views 6.x-2.11 создал представление Test, экспортировал в файл, который и прикрепляю, если будет свободное время и желание - пожалуйста внесите в него изменения, о которых писали выше. Заранее благодарю ))

Аватар пользователя Taran2L.UA Taran2L.UA 11 ноября 2010 в 17:27

Мда ....

Поставьте еще 10 модулей, чтобы создать пункт меню Smile

Смотрим hook_menu в модуле user:

  $items['user/%user_uid_optional'] = array(
    '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 Wink

Можно и view создавать и передавать default argument, как было написано ранее. Но в этом случае поламаються табы (например путь messages - ведёт на собстенную страницу, других юзер табов нету - с view будет то самое).