Созонов Алексей

Веб-разработчик

Views set header

09.08.2015

Как-то раз потребовалось добавить свою шапку к views программно. Нашел такой пример:

// Load the view.
$view = views_get_view('VIEW_NAME');
// Set the options for the header text.
// To get an idea of what options are available, set up a view with header text
// and then use the devel module to print out the view definition.
// For example, add a header text area field and print it with
// dpm($view->header['area']); after you have loaded it with views_get_view().
$header_options = array(
  'label' => t('Header text'), // Administrative label. Not really needed here.
  'content' => 'This is the header text content.', // Content of header text.
  'format' => 'filtered_html', // Format of header text.
  'empty' => 1, // Show even when there are no results. Set to zero otherwise.
);
// This adds a header handler for a text area. The table is views because it is not
// a database field. The field is area because it is a text area.
// The header_options are the settings.
$view->add_item('DISPLAY_NAME', 'header', 'views', 'area', $header_options);
// This is the preferred way to get the rendered view.
$output = $view->preview('DISPLAY_NAME');
// If you want you can check for results with this.
if (!empty($view->result)) {
  // Do something if there are rows.
}

// Для футера
$view->add_item('DISPLAY_NAME', 'footer', 'views', 'area', $footer_options);

// Для пустого результата
$view->add_item('DISPLAY_NAME', 'empty', 'views', 'area', $empty_options);

либо

/**
 * Implements hook_views_pre_view().
 */
function MODULENAME_views_pre_view($view, &$display_id, &$args) {
  if ($view->name == 'my_view' && $display_id == 'page') {
    $view->add_item($display_id, 'header', 'views', 'area', array('content' => 'Header text...', 'format' => 'full_html'));
    $view->add_item($display_id, 'footer', 'views', 'area_text_custom', array('content' => 'Footer text...'));
  }
}

а в hook_views_pre_render() можно изменять атачи

/**
 * Implements hook_views_pre_render().
 */
function MODULENAME_views_pre_render($view) {
  if ($view->name == 'my_view' && $view->current_display == 'page') {
    $view->attachment_before = 'Header text...';
    $view->attachment_after = 'Footer text...';
  }
}
#Drupal