Это следующий вопрос к Drupal Views, показывающий фильтр имени автора. На этот вопрос ответил и работает. Я могу фильтровать представление по имени пользователя. Вводимое имя пользователя вводится, введя поле, а затем поле автоматически завершается. Вместо этого я хотел бы, чтобы список пользователей был выпадающим. Мне нужен только один пользователь для выбора. Знаете ли вы, возможно ли это?
Drupal Views отображает фильтр имени автора как выпадающего
Ответ 1
Для этого вам понадобится специальный модуль.
Я сделал это для Drupal 7 следующим образом: создайте модуль, скажем, views_more_filters
, поэтому у вас есть файл views_more_filters.info
, например:
name = Views More Filters
description = Additional filters for Views.
core = 7.x
files[] = views_more_filters_handler_filter_author_select.inc
files[] = views_more_filters.views.inc
(файл views_more_filters_handler_filter_author_select.inc
будет содержать наш обработчик фильтра).
Основной views_more_filters.module
файл:
<?php
/**
* Implements of hook_views_api().
*/
function views_more_filters_views_api() {
return array('api' => 3);
}
Затем определите свой фильтр в views_more_filters.views.inc
:
<?php
/**
* Implements of hook_views_data().
*/
function views_more_filters_views_data() {
return array(
'node' => array(
'author_select' => array(
'group' => t('Content'),
'title' => t('Author UID (select list)'),
'help' => t('Filter by author, choosing from dropdown list.'),
'filter' => array('handler' => 'views_more_filters_handler_filter_author_select'),
'real field' => 'uid',
)
)
);
}
Заметим, что мы установили author_select
как машинное имя фильтра, обработчик фильтра ('handler' => 'views_more_filters_handler_filter_author_select'
) и поле, которое мы будем фильтровать ('real field' => 'uid'
).
Теперь нам нужно реализовать обработчик фильтра. Поскольку наш фильтр функционирует так же, как и по умолчанию views_handler_filter_in_operator
, мы просто расширяем его класс в файле views_more_filters_handler_filter_author_select.inc
:
<?php
/**
* My custom filter handler
*/
class views_more_filters_handler_filter_author_select extends views_handler_filter_in_operator {
/**
* Override parent get_value_options() function.
*
* @return
* Return the stored values in $this->value_options if someone expects it.
*/
function get_value_options() {
$users_list = entity_load('user');
foreach ($users_list as $user) {
$users[$user->uid] = $user->name;
}
// We don't need Guest user here, so remove it.
unset($users[0]);
// Sort by username.
natsort($users);
$this->value_options = $users;
return $users;
}
}
Нам здесь нечего было делать: просто заполните массив опций списком наших пользователей, остальные обработаны родительским классом.
Для получения дополнительной информации см.:
- API просмотров
- Где я могу узнать о том, как создать настраиваемый фильтр для просмотров 3 и D7? в Drupal Answers.
- Demystifying Views API - руководство разработчика по интеграции с представлениями
- Сложные фильтры Views, part2 - создание специального обработчика фильтра (на русском языке, ссылка на переводчика Google)
- Учебное пособие: создание пользовательских фильтров в представлениях
Ответ 2
Да, это возможно. Это не особенно сложно сделать это... но его немного утомительно. Вам нужно создать два представления
- Первое представление - это список пользователей вашей системы (вид типа
Users
). Этот список пользователей отображается как раскрывающийся список, а не список (с использованием стиля представления меню перехода). Нажатие на любого пользователя в этом выпадающем меню вызовет второе представление с идентификатором uid (идентификатором пользователя) выбранного пользователя в качестве аргумента в URL-адресе. Это представление является блоком. - Второй вид - это простой список Node. Это просмотр страницы по определенному URL-адресу. Он принимает 1 аргумент, который является uid (идентификатором пользователя) пользователя.
Подробные шаги
- Загрузите модуль Ctools http://drupal.org/project/ctools Включите модуль инструментов хаоса. Эта модуль обеспечивает плагин стиля представления "Меню перехода"
- Создайте новый вид типа
Users
и NOT typeNode
, который вы обычно Создайте. В полях добавьтеUser: Name
иUser: uid
. Для настройкиUser: uid
, убедитесь, что вы нажимаетеRewrite the output of the field
. Переписанный вывод поле должно бытьmy_node_list/[uid]
. Убедись, что ты установите флажокexclude from display
. - В настройках
Style
в представлении выберите стильJump Menu
. Нажмите на настройки стиля. Убедитесь, что выпадающее менюPath
выбраноUser: uid
- Добавить отображение блока в представление. Назовите блок
User Drop Down
- Сохранить представление
- Добавьте блок
User Drop Down
в любой регион вашей темы, например. Content Top (обычно лучший) или левая боковая панель. Убедитесь, что блок отображается только в URL-адресахmy_node_list/*
иmy_node_list
, установив параметры видимости блока - Теперь создайте другой вид типа
Node
. Добавьте поле аргументаUser: uid
. Добавьте поля, которые вас интересуют, например.Node: title
,User: Name
и т.д. - Добавить отображение страницы. Пусть страница находится на url
my_node_list
- Сохранить представление. Проверьте раскрывающийся список со списком пользователей в системе
http://yoursitename/my_node_list
Ответ 3
http://drupal.org/project/better_exposed_filters Проверьте этот
Ответ 4
Думаю, вам просто нужно выбрать "Таксономия: термин" идентификатор термина "таксономия" вместо "имя".
Ответ 5
Здесь найдено простое решение. http://bryanbraun.com/2013/08/06/drupal-tutorials-exposed-filters-with-views