Drupal Views выставил фильтр имени автора как выпадающий - PullRequest
14 голосов
/ 07 октября 2010

Это дополнительный вопрос к Drupal Views выставил фильтр имени автора . На следующий вопрос ответили и работает. Я могу фильтровать представление по имени пользователя. Имя пользователя вводится путем ввода в поле, а затем поле автоматически завершается. Вместо этого я хотел бы, чтобы список пользователей был выпадающим. Мне нужен только один пользователь. Вы знаете, возможно ли это?

Ответы [ 5 ]

25 голосов
/ 13 мая 2013

Для этого вам понадобится специальный модуль.

Я сделал это для 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;
  }
}

Нам не пришлось много здесь делать: просто заполните массив опций списком наших пользователей, остальное обрабатывает родительский класс.

Для получения дополнительной информации см .:

17 голосов
/ 08 октября 2010

Да, это возможно. Это не особенно сложно, но это немного утомительно. Вам нужно создать два вида

  1. Первое представление - это список пользователей в вашей системе (представление типа Users). Этот список пользователей отображается в виде раскрывающегося списка вместо списка (с использованием стиля просмотра меню перехода). Нажатие на любого пользователя в этом раскрывающемся списке вызовет второе представление с uid (идентификатор пользователя) выбранного пользователя в качестве аргумента в URL. Этот вид является блоком.
  2. Второй вид - это простой список узлов. Это просмотр страницы по определенному URL. Он принимает 1 аргумент, который является uid (идентификатор пользователя) пользователя.

Подробные шаги

  1. Скачать модуль Ctools http://drupal.org/project/ctools Включить Chaos Tools Module. это Модуль предоставляет плагин стиля стилей называется "Jump Menu"
  2. Создайте новое представление типа Users, а НЕ типа Node, которое вы обычно Создайте. В полях добавьте User: Name и User: uid. Для настройки User: uid, убедитесь Вы нажимаете на Rewrite the output of the field. Переписанный вывод поле должно быть my_node_list/[uid]. Убедись, что ты установите флажок exclude from display.
  3. В настройках Style на виде выберите стиль Jump Menu. Нажмите на настройки для стиля. Убедитесь, что в раскрывающемся списке Path выбрано User: uid, выбрано
  4. Добавить отображение блока в представление. Назовите блок User Drop Down
  5. Сохранить вид
  6. Добавьте блок User Drop Down в любой регион вашей темы, например. Контент сверху (обычно лучший) или левой боковой панели. Убедитесь, что блок виден только по URL my_node_list/* и my_node_list, установив параметры видимости блока
  7. Теперь создайте другое представление типа Node. Добавьте поле аргумента User: uid. Добавьте интересующие вас поля, например, Node: title, User: Name и т. Д.
  8. Добавить отображение страницы. Пусть страница будет по адресу my_node_list
  9. Сохранить вид. Проверьте выпадающий список со списком пользователей в системе на http://yoursitename/my_node_list
0 голосов
/ 18 февраля 2014

Нашел простое решение здесь. http://bryanbraun.com/2013/08/06/drupal-tutorials-exposed-filters-with-views

0 голосов
/ 05 мая 2011

Я думаю, что вам просто нужно выбрать «Таксономия: термин ID термина таксономии» вместо «имя».

0 голосов
/ 08 октября 2010
...