Итак, в очередной раз перед нами встала задача, а именно необходимо создать страницу со всеми статьями сайта, автором которых является текущий пользователь. Данную реализацию вы так же можете наблюдать на этом сайте (если вы зарегистрированы конечно), в своем профиле вы можете видеть ссылку «Мои вопросы», где отображаются все вопросы, которые вы задавали на этом сайте. Как всегда в качестве исходных данных у нас Drupal 7 и шаблон Bartik, а так же статьи, автором которых для данного примера являюсь я.
Итак, как вы наверное уже поняли для реализации нам понадобится модуль views, который мы не раз в уроках уже использовали, поэтому на подробном рассмотрении для чего нужен данный модуль, мы останавливаться не будем.
Идем по пути «Структура -> представления» и далее «добавить новое представление», где мы задаем необходимые параметры:

Вы можете выбрать любой необходимый вам тип материала.
Хочу так же заметить, что знак «%» в url, - обязателен, на его месте в пути будет подставляться имя автора статей, так например для меня данный путь будет выглядеть как
example.com/list-station/pantey
Идем далее, жмем «продолжить редактирование», переходим в раздел «Дополнительно» и добавляем «взаимосвязи»

Где, в качестве параметра выбираем «Содержимое: автор»

Жмем «Применить», и далее ставим галочку что «Эта связь обязательна»

И далее опять «применить». Со связями разобрались, теперь необходимо добавить контекстные фильтры, для этого жмем «добавить» напротив раздела «Контекстные фильтры»

В качестве параметра контекстного фильтра выбираем «Пользователь: Имя»

Жмем «Применить». Далее выбираем нашу связь, которая называется «автор», в пункте «Если значения фильтра нет в URL», выбираем «сырое значение из URL», в «качестве компонента пути» выбираем «2».

Хочу заметить, что компонент пути может забираться любой, в зависимости от того, что вы хотите видеть в url, а так как в качестве взаимосвязи у нас выступает «Пользователь: Имя», а в нашем случае имя пользователя будет выставляться на месте знака «%» в url, то и компонент пути будет именно 2. Например, если вам необходим будет путь
Имя_автора/list-station
То компонент пути будет : 1
Жмем «Применить» и далее «Сохранить». Теперь, если мы перейдем по пути
example.com/list-station/имя_автора
То мы увидим, все статьи, автором которых он является. В моем случае это выглядит так:

Теперь, нам необходимо добавить ссылку на данную страницу для каждого пользователя сайта, но в этом есть одна небольшая проблема, а именно views не сможет добавить ссылку в меню, так как в url мы используем знак «%», если же вы все таки попробуете это сделать то увидите вот такое сообщение:

Есть несколько решений данной проблемы, я же предлагаю вам самый простой – это использование модуля «Menu token», скачать его можно здесь .
Скажу вам сразу, что на этом сайте данная задача была реализована через хуки.
Установка модуля такая же, как и у всех модулей и есть несколько зависимостей. Вся прелесть данного модуля в том, что он поможет нам построить url для каждого пользователя сайта через токены. Итак, после активации модуля переходим в «Список ссылок» необходимого вам меню, в моем случае я выберу «Навигацию» и добавляем новую ссылку. Ставим галочку напротив «использовать токены в названии ссылки и url»

И в путь записываем формирование нашей ссылки:
list-station/[site:current-user:name]

и далее жмем «Сохранить». Теперь посмотрим, что у нас получилось:

С решением данной задачи мы справились, думаю на этом можно закончить.
Комментарии (7)
А можно подробней какие именно хуки вы используете для добавления пунктов меню с переменной % и почему вы сами не используете модуль Menu token?
было реализовано через
где формировал ссылку для меню. Имя пользователя выдергивал из глобальной переменной $user;
не использовал этот модуль, потому что не искал готовых решений на тот момент - было проще написать самому. А при написании этого урока - попался на глаза этот модуль.
Спасибо большое очень полезная статья. сам раньше реализовал подобный функционал, только в контекстных фильтрах использовал Uid Пользователя.
Здравствуйте. Подскажите, пожалуйста, как можно привязать к пользователю материал? Необходимо, чтобы у пользователя(инженера) выводились ноды(заявки), назначенные ему менеджером или системой автоматически. Думала сделать через таксономию, но не знаю есть ли возможность выбора термина автоматически или по критериям. С php у меня все плохо, поэтому я сейчас в ступоре. Спасибо.
Спасибо за материал. Я делал похожее подсмотрев функционал модуля Tracker. Подскажите, как можно скрыть ссылку для определенной роли зарегистрированных пользователей? Т.е. пользователь видит свои вопросы, а редактор вопросы всех пользователей. Отдельно вьюху для редактора создал, но как лучше скрыть меню "Мои вопросы" для редактора, он не должен видеть свои вопросы, только пользователей.
hook_node_access - для контроля доступа к ноде и theme_menu_link - для скрытия пункта из меню
Спасибо. Реализовал с помощью theme_menu_link. Если в ссылке есть example.com/list-station/имя_автора (редактора), ссылка скрывается.