Добавление столбца в таблицу представлений отображение при условии аргумента
У меня есть пользовательское представление, определенное в модуле, которое предоставляет табличное отображение данных, которое принимает идентификатор узла в качестве аргумента.
------------------
| 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 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
.