Как вывести с помощью views разное количество полей и строк таблицы

Главные вкладки

Аватар пользователя Dimm Dimm 4 сентября 2008 в 21:25

Нужно было в зависимости от страницы вывести с помощью views разное количество полей и строк таблицы. (Программное изменение Field во Views с помощью Argument Handling Code )

Решение:
1. Формируем нужный views со всеми нужными полями в пользовательском интерфейсе.
2. В template.php добавляем функцию которая выведет содержимое $view
<?php
function имятемы_view_table($view, $nodes, $type) {
print "

";
  print_r ($view);
  print "

";
$fields = _views_get_fields();

foreach ($nodes as $node) {
$row = array();
foreach ($view->field as $field) {
if ($fields[$field['id']]['visible'] !== FALSE) {
$cell['data'] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
$cell['class'] = "view-field ". views_css_safe('view-field-'. $field['queryname']);
$row[] = $cell;
}
}
$rows[] = $row;
}
return theme('table', $view->table_header, $rows) . "!!!";
}
?>
3. Открываем вьюес и ищем массив field
4. Из полей массива field формируем код и вставляем его в Argument Handling Code в нужные условия
У меня получилось такое (ставит вывод таблицей, выводит картинку и тайтл, убирает пэйджер и выводит 999 строк):
<?php
if($args[1] == 'firm' || $args[1] == 'producer'){
if($type=='page'){
$view->page_type = 'table';
$use_pager= FALSE;
$limit = '999';
$view->field = array();
$view->field[0] = array(
'vid' => '36',
'tablename' => 'node_data_field_firm_logo',
'field' => 'field_firm_logo_fid',
'label' => '',
'handler' => 'content_views_field_handler_group',
'sortable' => '0',
'defaultsort' => '',
'options' => '',
'position' => '0',
'fullname' => 'node_data_field_firm_logo.field_firm_logo_fid',
'id' => 'node_data_field_firm_logo.field_firm_logo_fid',
'queryname' => 'node_data_field_firm_logo_field_firm_logo_fid',
);
$view->field[1] = array(
'vid' => '36',
'tablename' => 'node',
'field' => 'title',
'label' => '',
'handler' => 'views_handler_field_nodelink',
'sortable' => '0',
'defaultsort' => '0',
'options' => 'link',
'position' => '1',
'fullname' => 'node.title',
'id' => 'node.title',
'queryname' => 'node_title',
);
}
}
?>
5.Теперь ненужные поля во вьюесе можно убрать и удалить функцию из template.php.