Подтвердить что ты не робот

Drupal Views отображает фильтр имени автора как выпадающего

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

4b9b3361

Ответ 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;
  }
}

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

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

Ответ 2

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

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

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

  • Загрузите модуль Ctools http://drupal.org/project/ctools Включите модуль инструментов хаоса. Эта модуль обеспечивает плагин стиля представления "Меню перехода"
  • Создайте новый вид типа Users и NOT type Node, который вы обычно Создайте. В полях добавьте 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

Ответ 4

Думаю, вам просто нужно выбрать "Таксономия: термин" идентификатор термина "таксономия" вместо "имя".