Помощь начинающим веб
разработчикам

Вывод статей сайта, автором которых является текущий пользователь

12.03.2014

Итак, в очередной раз перед нами встала задача, а именно необходимо создать страницу со всеми статьями сайта, автором которых является текущий пользователь. Данную реализацию вы так же можете наблюдать на этом сайте (если вы зарегистрированы конечно), в своем профиле вы можете видеть ссылку «Мои вопросы», где отображаются все вопросы, которые вы задавали на этом сайте. Как всегда в качестве исходных данных у нас 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)

Profile picture for user Anton
NIK
13.03.2014

А можно подробней какие именно хуки вы используете для добавления пунктов меню с переменной % и почему вы сами не используете модуль Menu token?

Profile picture for user pantey
pantey
13.03.2014

было реализовано через

<?php hook_menu();?>

где формировал ссылку для меню. Имя пользователя выдергивал из глобальной переменной $user;
не использовал этот модуль, потому что не искал готовых решений на тот момент - было проще написать самому. А при написании этого урока - попался на глаза этот модуль.

Profile picture for user Anton
NIK
13.03.2014

Спасибо большое очень полезная статья. сам раньше реализовал подобный функционал, только в контекстных фильтрах использовал Uid Пользователя.

Profile picture for user Anton
Ирина
10.05.2014

Здравствуйте. Подскажите, пожалуйста, как можно привязать к пользователю материал? Необходимо, чтобы у пользователя(инженера) выводились ноды(заявки), назначенные ему менеджером или системой автоматически. Думала сделать через таксономию, но не знаю есть ли возможность выбора термина автоматически или по критериям. С php у меня все плохо, поэтому я сейчас в ступоре. Спасибо.

Profile picture for user Serzh
Serzh
29.09.2015

Спасибо за материал. Я делал похожее подсмотрев функционал модуля Tracker. Подскажите, как можно скрыть ссылку для определенной роли зарегистрированных пользователей? Т.е. пользователь видит свои вопросы, а редактор вопросы всех пользователей. Отдельно вьюху для редактора создал, но как лучше скрыть меню "Мои вопросы" для редактора, он не должен видеть свои вопросы, только пользователей.

Profile picture for user pantey
pantey
29.09.2015

hook_node_access - для контроля доступа к ноде и theme_menu_link - для скрытия пункта из меню

Profile picture for user Serzh
Serzh
30.09.2015

Спасибо. Реализовал с помощью theme_menu_link. Если в ссылке есть example.com/list-station/имя_автора (редактора), ссылка скрывается.

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

- Оповестить о новом комментарии.
- Все комментарии
- Только мои комментарии