Оформление табличного вывода views, через phptemplate

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

Аватар пользователя karasiov@drupal.org karasiov@drupal.org 31 октября 2008 в 0:10

В дистрибутиве views есть дополнительный модуль, который называется theme wizard. Theme wizard предоставляет возможность сгененировать три файла, с помощью которых можно затем добавить на страницу собственное оформление результатов работы модуля views.

Выглядит это так:

0. Включить модуль Theme Wizard (если еще не сделали этого)
1. На странице настроек Views перейти на закладку Theme wizard
2. Выбрать в списке Select a view необходимый вам список
3. Выбрать в списке Select theme type необходимый вам формат
4. Нажать кнопку Select theme type

В результате вы получите три файла.

Первый содержит в себе функцию переопределяющую стандартный вид списка.
Второй вызывается из первого и содержит в себе необходимую раметку.
Третий вызывается из второго и содержит в себе шаблон таблицы стилей для оформления содержимого второго файла.

Звучит ужасающе, но это еще не все.

Содержимое первого файла следует поместить в файл template.php, назначение которого подробно расписано на сайте (http://drupal.ru/node/13271). Второй и третий файлы следует поместить в каталог рядом с phptemplate.php. Именовать их следует так, как сказано на странице генерации.

Ну и далее, путем настройки CSS в третьем файле, вы можете задать вашим спискам желаемый внешний вид.

Все это прекрасно работает ровно в том случае, если вы выводите views в виде списков. Если вам вдруг понадобится таблица - визард вам не поможет. Это обидно - но, к счастью, не смертельно.

Есть одна полезная ссылка (http://drupal.org/node/42597). В ней содержаться образцы кода для вывода views различного вида.

Далее.

1. Я скопировал оттуда функцию отвечающую за вывод в виде таблицы.

/**
* Display the nodes of a view as a table.
*/

function theme_views_view_table($view, $nodes, $type) {
  $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);
}

2. Вставил все это в phptemplate.php.
3. Добавил туда же (прямо в функцию) строчку drupal_add_css(path_to_theme() .'/my-table-custom-view.css');
4. Принялся споро редактировать CSS, памятуя о том, что имена CSS-классов задаются в вышеприведенной функции.

Продолжение следует...