Я думаю, что вы имеете в виду, что вы хотите использовать аргумент, а не строку запроса.В любом случае, я не думаю, что Views может по умолчанию обрабатывать имена ролей (он может отлично обрабатывать идентификаторы ролей), поэтому вам придется изменить запрос представления, чтобы достичь желаемого.
Сначала, добавьте пользователя: роли в качестве аргумента в вашем представлении.Затем в пользовательском модуле реализуйте hook_views_query_alter () и измените запрос, заменив имя роли на его идентификатор роли.
function MYMODULE_views_query_alter(&$view, &$query) {
if ($view->name == 'my_view') {
$rolename = '';
foreach ($query->where as $where_index => $where) {
// find the role ID clause
$clause_index = array_search('users_roles.rid = %d', $where['clauses']);
if ($clause_index !== FALSE) {
// found it, so get the rolename
$rolename = $where['args'][$clause_index];
break;
}
}
// if the rolename argument was found
if (!empty($rolename)) {
// get the role ID
$user_roles = user_roles();
$rid = array_search($rolename, $user_roles);
// if the role exists, then replace the argument
if ($rid !== FALSE) {
$query->where[$where_index]['args'][$clause_index] = $rid;
}
}
}
}
Так, например, если ваш URL-адрес равен http://mysite.com/a,, тогда онбудет искать идентификатор роли «а», а затем найти все узлы автора с этой ролью.Он также будет принимать фактический идентификатор роли - например, если идентификатор роли 'a' равен 10, то http://mysite.com/10 также вернет тот же результат.
Если вы хотите, чтобы он только просматривалup rolenames, вы можете изменить ловушку так, чтобы она не работала, когда она не находит роль (просто сделайте $ rid = 0, и вы не получите никаких результатов).