[Решено] Обработка транслитерированного имени пользователя как аргумента Views

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

Аватар пользователя Vladimir_Z Vladimir_Z 28 марта 2009 в 8:18

Модуль pathauto настроен на транслитерацию строк при создании синонимов путей.
Для пользователей используется шаблон

users/[user-raw].

Тогда для пользователя Цветок сирени будет создан синоним users/tsvetok-sireni

Если мы хотим получить для материала типа Видео с названием Мой Ролик, загруженного пользователем Цветок сирени, пути вида video/tsvetok-sireni/moi-rolik, то в настройках pathauto задаем шаблон для этого типа материала:

video/[author-name-raw]/[title-raw]

Для вывода всех видео одного автора мы хотим использовать пути вида video/[author-name-raw].
То есть все видео пользователя Цветок сирени должны выводиться на странице с адресом video/tsvetok-sireni.

Если мы создадим представление "Страница" Views, укажем в качестве пути video,
а в качестве аргумента user:UID (или user:username), то работать это будет только при передаче ID пользователя или его нетраслитерированного имени в качестве аргумента.
То есть это будет работать для video/Цветок сирени или video/3 (если 3 это ID пользователя Цветок сирени),
но не будет работать для video/tsvetok-sireni.

Чтобы решить эту проблему воспользуемся Валидатором Views.
В Validation options в качестве валидатора (Validator) укажем PHP Code.
Разрешим использование числовых ID и строчных имен (Allow both numeric UIDs and string usernames).
В PHP validate code введем сделующее:

$alias = 'users/' . $argument;
$url = drupal_lookup_path('source', $alias);
if ($url != false):
list($path, $userID) = split('[/]', $url);
$handler->argument = $userID;
endif;
return TRUE;

Идея этого способа исходит из этого обсуждения "настройка view c термином в аргументе при работе pathauto"

Комментарии

Аватар пользователя kovtunos kovtunos 29 марта 2009 в 0:30

ОГРОМНОЕ спасибо! Давно искал как это сделать.
А вот как сделать, чтобы вверху страницы было написано, например: Статьи пользователя: Иван Петров (не в транслите) ?

Аватар пользователя dandily dandily 17 декабря 2010 в 16:35

«В Validation options в качестве валидатора (Validator) укажем PHP Code.
Разрешим использование числовых ID и строчных имен (Allow both numeric UIDs and string usernames).»

Что-то не могу понять - как можно и то и другое сразу указывать?
Вроде бы эти варианты находятся в одном выпадающем списке и подразумевают единственный выбор, либо то, либо другое. Разве не так?

Каким-то образом у меня получилось вначале сделать так, что бы транслитерированные имена пользователей срабатывали, а потом я что-то менял в настройках представления и данная возможность перестала работать. Вернуть ее пока не получается, просто не показывает ничего при подстановке ника...

Аватар пользователя Antoniy Antoniy 12 мая 2012 в 10:11

PHP-код из топика ставим, как аргумент по умолчанию.

Настройки проверки: по Пользователю, Разрешенный пользовательский аргумент - цифровые UID и строки usernames

Аватар пользователя Antoniy Antoniy 12 мая 2012 в 11:19

Решение отличное, спасибо!

Думаю, как передавать аргумент URL не user/usernamealias/mycontent
а usernamealias/mycontent (без user, или чего-либо еще в начале пути). По идее для этого надо поставить в пути views %/mycontent но % сразу ставить нельзя

Аватар пользователя vladddddd vladddddd 6 ноября 2014 в 3:29

Подскажите решение проблемы ТС под 7-ку. 4 дня гуглю ни одного рабочего решения для себя не нашел проблема один в один.

Так аргументы срабатывают: video/Цветок сирени или video/3
Так нет: video/tsvetok-sireni

Прошу хелп ми 4 дня на одном месте.