Добавление столбца в таблицу представлений отображение при условии аргумента


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

------------------
| Col 1  | Col 2 |
------------------
| A      | B     |
------------------

Я хочу иметь возможность проверить некоторые данные из узла, который является аргументом, чтобы увидеть, установлено ли для определенного поля значение 0 (без дополнительного столбца) или 1 (дополнительный столбец).

Использование hook_views_default_views_alter() Я могу добавить дополнительный столбец в таблицу, используя:

function MODULE_NAME_views_default_views_alter(&$views) {
  if (isset($views['VIEW_NAME'])) {
    // Add an extra field to the rider times view
    $handler = &$views['VIEW_NAME']->display['default']->handler;
    $handler->display->display_options['fields']['nothing']['id'] = 'nothing';
    $handler->display->display_options['fields']['nothing']['table'] = 'views';
    $handler->display->display_options['fields']['nothing']['field'] = 'nothing';
    $handler->display->display_options['fields']['nothing']['label'] = '';
    $handler->display->display_options['fields']['nothing']['alter']['text'] = 'Download';
    $handler->display->display_options['fields']['nothing']['alter']['make_link'] = TRUE;
    $handler->display->display_options['fields']['nothing']['alter']['path'] = 'download/[nid]/[number]';
    $handler->display->display_options['fields']['nothing']['element_label_colon'] = FALSE;
  }
}

Но это добавляет столбец во все таблицы независимо от аргумента.

Я думаю, должен быть способ добавить столбец через hook_views_pre_render(), но я не могу понять, как это сделать.

Альтернативой было бы настроить 2 представления. Один с дополнительным столбцом и один без и условно отображает правильное представление на основе фильтра видимости контекста/панели.

 1
Author: jamestsymp, 2014-07-14

1 answers

Я не знаю, лучший ли это способ сделать это, но когда мне понадобились условные столбцы, я удалил их в hook_views_pre_build() ( то есть до того, как запрос будет построен). Код будет примерно таким:

/**
 * Implements hook_views_pre_build().
 *
 * Removes column X on condition Y from all displays of view Z.
 */
function MYMODULE_views_pre_build(&$view) {

  // Check this is the right view.
  if ($view->name != 'Z') {
    return;
  }

  // Check if the column should be removed.
  if (!$Y) {
    return;
  }

  unset($view->field['X']);
}

Приведенный выше код повлияет на все отображения представления. Если вы хотите настроить таргетинг на определенный дисплей, просто также отметьте $view->current_display.

 1
Author: Andy, 2014-07-14 10:33:12