Рейтинг:0

Помощь с плагином Views Field

флаг cn

Я пытаюсь создать плагин поля просмотра, который предоставляет мне некоторые дополнительные функции для поля. У меня проблемы с этим.

У меня есть тип сущности, называемый lms_request. Внутри него множество пучков.

При использовании пользовательского «плагина поля представлений» в представлении, которое специально фильтрует один пакет, он работает нормально.

Когда я пытаюсь использовать одно и то же поле в представлении, в котором отфильтровано несколько пакетов или вообще не отфильтровано ни одного пакета (чтобы показать все), возникает ошибка, не позволяющая мне отображать представление. Выдает такую ​​ошибку:

Примечание: Неопределенный индекс: изменить в Drupal\views\Plugin\views\field\FieldPluginBase->advancedRender()

а также Ошибка: неподдерживаемые типы операндов в Drupal\views\Plugin\views\field\FieldPluginBase->advancedRender()

Если я войду в определение fieldplugin и установлю переопределение определить параметры

  общедоступная функция defineOptions() {
    вернуть parent::defineOptions();
  }

Я получаю следующее в dblog (3 раза) Примечание: попытка доступа к смещению массива для значения типа null в Drupal\views\Plugin\views\field\FieldPluginBase->defineOptions()

Меня смущает, почему при фильтрации одного пакета он работает должным образом, но как только я удаляю фильтр или устанавливаю фильтр на несколько пакетов, он разбивает поле.

Мой hook_views_data() выглядит так:

функция lms_request_views_data() {
  $data['lms_request']['request_system_quick_edit'] = [
    'title' => t('Запрос на быстрое редактирование'),
    'help' => t('Форма запроса быстрого редактирования'),
    'поле' => [
      'id' => 'request_system_quick_edit',
    ],
  ];

  вернуть $данные;
}

Где «request_system_quick_edit» — это имя созданного мной плагина настраиваемого поля.

Код плагина поля выглядит так:

<?php

пространство имен Drupal\request_system\Plugin\views\field;

используйте Drupal\views\Plugin\views\field\FieldPluginBase;
используйте Drupal\views\ResultRow;

используйте Drupal\Core\Form\FormStateInterface;
используйте Drupal\Core\Url;

/**
 * Предоставляет обработчик полей быстрого редактирования.
 *
 * @ViewsField("request_system_quick_edit")
 *
 * @DCG
 * Плагин должен быть назначен определенному столбцу таблицы через
 * hook_views_data() или hook_views_data_alter().
 * Для несуществующих столбцов (т.е. вычисляемых полей) необходимо переопределить
 * метод self::query().
 */
класс QuickEdit расширяет FieldPluginBase {

  защищенное $хранилище;
  защищенная таксономия $;
  защищенный $library_item;

  /**
   * {@inheritdoc}
   */
  публичная функция __construct() {
    $this->storage = \Drupal::entityTypeManager()->getStorage('lms_request');
    $this->taxonomy = \Drupal::entityTypeManager()->getStorage('taxonomy_term');
    $this->library_item = \Drupal::entityTypeManager()->getStorage('item_type');
  }

   /**
   * {@inheritdoc}
   */
  запрос публичной функции () {

  }

  // /**
  // * {@inheritdoc}
  // */
  защищенная функция defineOptions() {
    родитель::defineOptions();
  }

  // /**
  // * {@inheritdoc}
  // */
  общедоступная функция buildOptionsForm(&$form, FormStateInterface $form_state) {
    родитель::buildOptionsForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  публичная функция рендеринга (ResultRow $values) {
    $build['output']['#markup'] = 'Тест';

    вернуть $сборку;
  }
}

Кроме того, при добавлении поля метка и группа отображаются правильно, но как только поле появляется в представлении, оно показывает : вместо Группа:Имя поля Любая помощь будет принята с благодарностью.

4uk4 avatar
флаг cn
Использует ли представление агрегацию? Если вы посмотрите на вычисляемое поле, вы обычно увидите две вещи: пустую функцию query() и `public function useGroupBy() { return FALSE; }`
Рейтинг:0
флаг rs

Я думаю, проблема может заключаться в том, что вам нужно добавить тип для вашего элемента массива рендеринга:

публичная функция рендеринга (ResultRow $values) {
    $сборка['выход'] = [
      '#type' => 'контейнер',
      '#markup' => 'Тест',
    ];

    вернуть $сборку;
}

Ответить или комментировать

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