Functions

Views' hooks

Hooks that can be implemented by other modules in order to implement the Views API. More...

Functions

 hook_views_data ()
 Describe table structure to Views.
 hook_views_data_alter (&$data)
 Alter table structure.
 hook_views_plugins ()
 The full documentation for this hook is now in the advanced help.
 hook_views_plugins_alter (&$plugins)
 Alter existing plugins data, defined by modules.
 hook_views_api ()
 Register View API information.
 hook_views_default_views ()
 This hook allows modules to provide their own views which can either be used as-is or as a "starter" for users to build from.
 hook_views_default_views_alter (&$views)
 Alter default views defined by other modules.
 hook_views_query_substitutions ()
 Stub hook documentation.
 hook_views_form_substitutions ()
 This hook is called to get a list of placeholders and their substitutions, used when preprocessing a View with form elements.
 hook_views_form_validate ($form, &$form_state)
 Views form (View with form elements) validate handler.
 hook_views_form_submit ($form, &$form_state)
 Views form (View with form elements) submit handler.
 hook_views_pre_view (&$view, &$display_id, &$args)
 This hook is called at the very beginning of views processing, before anything is done.
 hook_views_pre_build (&$view)
 This hook is called right before the build process, but after displays are attached and the display performs its pre_execute phase.
 hook_views_post_build (&$view)
 This hook is called right after the build process.
 hook_views_pre_execute (&$view)
 This hook is called right before the execute process.
 hook_views_post_execute (&$view)
 This hook is called right after the execute process.
 hook_views_pre_render (&$view)
 This hook is called right before the render process.
 hook_views_post_render (&$view, &$output, &$cache)
 Post process any rendered data.
 hook_views_query_alter (&$view, &$query)
 Stub hook documentation.
 hook_views_preview_info_alter (&$rows, $view)
 This hook should be placed in MODULENAME.views.inc and it will be auto-loaded.
 hook_views_ui_display_top_links_alter (&$links, $view, $display_id)
 This hooks allows to alter the links at the top of the view edit form.
 hook_views_ajax_data_alter (&$commands, $view)
 This hook allows to alter the commands which are used on a views ajax request.

Detailed Description

Hooks that can be implemented by other modules in order to implement the Views API.


Function Documentation

hook_views_ajax_data_alter ( &$  commands,
view 
)

This hook allows to alter the commands which are used on a views ajax request.

Parameters:
$commands An array of ajax commands
$view view The view which is requested.

Definition at line 754 of file views.api.php.

                                                       {
}

hook_views_api (  ) 

Register View API information.

This is required for your module to have its include files loaded; for example, when implementing hook_views_default_views().

Returns:
An array with the following possible keys:
  • api: (required) The version of the Views API the module implements.
  • path: (optional) If includes are stored somewhere other than within the root module directory, specify its path here.
  • template path: (optional) A path where the module has stored it's views template files. When you have specificed this key views automatically uses the template files for the views. You can use the same naming conventions like for normal views template files.

Definition at line 278 of file views.api.php.

                          {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'example') . '/includes/views',
    'template path' => drupal_get_path('module', 'example') . 'themes',
  );
}

hook_views_data (  ) 

Describe table structure to Views.

This hook should be placed in MODULENAME.views.inc and it will be auto-loaded. MODULENAME.views.inc must be in the directory specified by the 'path' key returned by MODULENAME_views_api(), or the same directory as the .module file, if 'path' is unspecified.

The full documentation for this hook is in the advanced help. http://views-help.doc.logrus.com/help/views/api-tables

Definition at line 74 of file views.api.php.

                           {
  // This example describes how to write hook_views_data() for the following
  // table:
  //
  // CREATE TABLE example_table (
  //   nid INT(11) NOT NULL         COMMENT 'Primary key; refers to {node}.nid.',
  //   plain_text_field VARCHAR(32) COMMENT 'Just a plain text field.',
  //   numeric_field INT(11)        COMMENT 'Just a numeric field.',
  //   boolean_field INT(1)         COMMENT 'Just an on/off field.',
  //   timestamp_field INT(8)       COMMENT 'Just a timestamp field.',
  //   PRIMARY KEY(nid)
  // );

  // The 'group' index will be used as a prefix in the UI for any of this
  // table's fields, sort criteria, etc. so it's easy to tell where they came
  // from.
  $data['example_table']['table']['group'] = t('Example table');

  // Define this as a base table. In reality this is not very useful for
  // this table, as it isn't really a distinct object of its own, but
  // it makes a good example.
  $data['example_table']['table']['base'] = array(
    'field' => 'nid',
    'title' => t('Example table'),
    'help' => t("Example table contains example content and can be related to nodes."),
    'weight' => -10,
  );

  // This table references the {node} table.
  // This creates an 'implicit' relationship to the node table, so that when 'Node'
  // is the base table, the fields are automatically available.
  $data['example_table']['table']['join'] = array(
    // Index this array by the table name to which this table refers.
    // 'left_field' is the primary key in the referenced table.
    // 'field' is the foreign key in this table.
    'node' => array(
      'left_field' => 'nid',
      'field' => 'nid',
    ),
  );

  // Next, describe each of the individual fields in this table to Views. For
  // each field, you may define what field, sort, argument, and/or filter
  // handlers it supports. This will determine where in the Views interface you
  // may use the field.

  // Node ID field.
  $data['example_table']['nid'] = array(
    'title' => t('Example content'),
    'help' => t('Some example content that references a node.'),
    // Because this is a foreign key to the {node} table. This allows us to
    // have, when the view is configured with this relationship, all the fields
    // for the related node available.
    'relationship' => array(
      'base' => 'node',
      'field' => 'nid',
      'handler' => 'views_handler_relationship',
      'label' => t('Example node'),
    ),
  );

  // Example plain text field.
  $data['example_table']['plain_text_field'] = array(
    'title' => t('Plain text field'),
    'help' => t('Just a plain text field.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
  );

  // Example numeric text field.
  $data['example_table']['numeric_field'] = array(
    'title' => t('Numeric field'),
    'help' => t('Just a numeric field.'),
    'field' => array(
      'handler' => 'views_handler_field_numeric',
      'click sortable' => TRUE,
     ),
    'filter' => array(
      'handler' => 'views_handler_filter_numeric',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );

  // Example boolean field.
  $data['example_table']['boolean_field'] = array(
    'title' => t('Boolean field'),
    'help' => t('Just an on/off field.'),
    'field' => array(
      'handler' => 'views_handler_field_boolean',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_boolean_operator',
      'label' => t('Published'),
      'type' => 'yes-no',
      // use boolean_field = 1 instead of boolean_field <> 0 in WHERE statment
      'use equal' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );

  // Example timestamp field.
  $data['example_table']['timestamp_field'] = array(
    'title' => t('Timestamp field'),
    'help' => t('Just a timestamp field.'),
    'field' => array(
      'handler' => 'views_handler_field_date',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort_date',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_date',
    ),
  );

  return $data;
}

hook_views_data_alter ( &$  data  ) 

Alter table structure.

You can add/edit/remove to existing tables defined by hook_views_data().

This hook should be placed in MODULENAME.views.inc and it will be auto-loaded. MODULENAME.views.inc must be in the directory specified by the 'path' key returned by MODULENAME_views_api(), or the same directory as the .module file, if 'path' is unspecified.

The full documentation for this hook is in the advanced help. http://views-help.doc.logrus.com/help/views/api-tables

Definition at line 222 of file views.api.php.

                                       {
  // This example alters the title of the node: nid field for the admin.
  $data['node']['nid']['title'] = t('Node-Nid');

  // This example adds a example field to the users table
  $data['users']['example_field'] = array(
    'title' => t('Example field'),
    'help' => t('Some examüple content that references a user'),
    'handler' => 'hook_handlers_field_example_field',
  );

  // This example changes the handler of the node title field.
  // In this handler you could do stuff, like preview of the node, when clicking the node title.

  $data['node']['title']['handler'] = 'modulename_handlers_field_node_title';
}

hook_views_default_views (  ) 

This hook allows modules to provide their own views which can either be used as-is or as a "starter" for users to build from.

This hook should be placed in MODULENAME.views_default.inc and it will be auto-loaded. MODULENAME.views_default.inc must be in the directory specified by the 'path' key returned by MODULENAME_views_api(), or the same directory as the .module file, if 'path' is unspecified.

The $view->disabled boolean flag indicates whether the View should be enabled or disabled by default.

Returns:
An associative array containing the structures of views, as generated from the Export tab, keyed by the view name. A best practice is to go through and add t() to all title and label strings, with the exception of menu strings.

Definition at line 304 of file views.api.php.

                                    {
  // Begin copy and paste of output from the Export tab of a view.
  $view = new view;
  $view->name = 'frontpage';
  $view->description = t('Emulates the default Drupal front page; you may set the default home page path to this view to make it your front page.');
  $view->tag = t('default');
  $view->base_table = 'node';
  $view->api_version = 2;
  $view->disabled = FALSE; // Edit this to true to make a default view disabled initially
  $view->display = array();
    $display = new views_display;
    $display->id = 'default';
    $display->display_title = t('Master');
    $display->display_plugin = 'default';
    $display->position = '1';
    $display->display_options = array (
    'style_plugin' => 'default',
    'style_options' =>
    array (
    ),
    'row_plugin' => 'node',
    'row_options' =>
    array (
      'teaser' => 1,
      'links' => 1,
    ),
    'relationships' =>
    array (
    ),
    'fields' =>
    array (
    ),
    'sorts' =>
    array (
      'sticky' =>
      array (
        'id' => 'sticky',
        'table' => 'node',
        'field' => 'sticky',
        'order' => 'ASC',
      ),
      'created' =>
      array (
        'id' => 'created',
        'table' => 'node',
        'field' => 'created',
        'order' => 'ASC',
        'relationship' => 'none',
        'granularity' => 'second',
      ),
    ),
    'arguments' =>
    array (
    ),
    'filters' =>
    array (
      'promote' =>
      array (
        'id' => 'promote',
        'table' => 'node',
        'field' => 'promote',
        'operator' => '=',
        'value' => '1',
        'group' => 0,
        'exposed' => false,
        'expose' =>
        array (
          'operator' => false,
          'label' => '',
        ),
      ),
      'status' =>
      array (
        'id' => 'status',
        'table' => 'node',
        'field' => 'status',
        'operator' => '=',
        'value' => '1',
        'group' => 0,
        'exposed' => false,
        'expose' =>
        array (
          'operator' => false,
          'label' => '',
        ),
      ),
    ),
    'items_per_page' => 10,
    'use_pager' => '1',
    'pager_element' => 0,
    'title' => '',
    'header' => '',
    'header_format' => '1',
    'footer' => '',
    'footer_format' => '1',
    'empty' => '',
    'empty_format' => '1',
  );
  $view->display['default'] = $display;
    $display = new views_display;
    $display->id = 'page';
    $display->display_title = t('Page');
    $display->display_plugin = 'page';
    $display->position = '2';
    $display->display_options = array (
    'defaults' =>
    array (
      'access' => true,
      'title' => true,
      'header' => true,
      'header_format' => true,
      'header_empty' => true,
      'footer' => true,
      'footer_format' => true,
      'footer_empty' => true,
      'empty' => true,
      'empty_format' => true,
      'items_per_page' => true,
      'offset' => true,
      'use_pager' => true,
      'pager_element' => true,
      'link_display' => true,
      'php_arg_code' => true,
      'exposed_options' => true,
      'style_plugin' => true,
      'style_options' => true,
      'row_plugin' => true,
      'row_options' => true,
      'relationships' => true,
      'fields' => true,
      'sorts' => true,
      'arguments' => true,
      'filters' => true,
      'use_ajax' => true,
      'distinct' => true,
    ),
    'relationships' =>
    array (
    ),
    'fields' =>
    array (
    ),
    'sorts' =>
    array (
    ),
    'arguments' =>
    array (
    ),
    'filters' =>
    array (
    ),
    'path' => 'frontpage',
  );
  $view->display['page'] = $display;
    $display = new views_display;
    $display->id = 'feed';
    $display->display_title = t('Feed');
    $display->display_plugin = 'feed';
    $display->position = '3';
    $display->display_options = array (
    'defaults' =>
    array (
      'access' => true,
      'title' => false,
      'header' => true,
      'header_format' => true,
      'header_empty' => true,
      'footer' => true,
      'footer_format' => true,
      'footer_empty' => true,
      'empty' => true,
      'empty_format' => true,
      'use_ajax' => true,
      'items_per_page' => true,
      'offset' => true,
      'use_pager' => true,
      'pager_element' => true,
      'use_more' => true,
      'distinct' => true,
      'link_display' => true,
      'php_arg_code' => true,
      'exposed_options' => true,
      'style_plugin' => false,
      'style_options' => false,
      'row_plugin' => false,
      'row_options' => false,
      'relationships' => true,
      'fields' => true,
      'sorts' => true,
      'arguments' => true,
      'filters' => true,
    ),
    'relationships' =>
    array (
    ),
    'fields' =>
    array (
    ),
    'sorts' =>
    array (
    ),
    'arguments' =>
    array (
    ),
    'filters' =>
    array (
    ),
    'displays' =>
    array (
      'default' => 'default',
      'page' => 'page',
    ),
    'style_plugin' => 'rss',
    'style_options' =>
    array (
      'description' => '',
    ),
    'row_plugin' => 'node_rss',
    'row_options' =>
    array (
      'item_length' => 'default',
    ),
    'path' => 'rss.xml',
    'title' => t('Front page feed'),
  );
  $view->display['feed'] = $display;
  // End copy and paste of Export tab output.

  // Add view to list of views to provide.
  $views[$view->name] = $view;

  // ...Repeat all of the above for each view the module should provide.

  // At the end, return array of default views.
  return $views;
}

hook_views_default_views_alter ( &$  views  ) 

Alter default views defined by other modules.

This hook is called right before all default views are cached to the database. It takes a keyed array of views by reference.

Example usage to add a field to a view:

   $handler =& $view->display['DISPLAY_ID']->handler;
   // Add the user name field to the view.
   $handler->display->display_options['fields']['name']['id'] = 'name';
   $handler->display->display_options['fields']['name']['table'] = 'users';
   $handler->display->display_options['fields']['name']['field'] = 'name';
   $handler->display->display_options['fields']['name']['label'] = 'Author';
   $handler->display->display_options['fields']['name']['link_to_user'] = 1;

Definition at line 558 of file views.api.php.

                                                 {
  if (isset($views['taxonomy_term'])) {
    $views['taxonomy_term']->display['default']->display_options['title'] = 'Categories';
  }
}

hook_views_form_submit ( form,
&$  form_state 
)

Views form (View with form elements) submit handler.

Called for all steps ($form_state['step']) of the multistep form.

Definition at line 593 of file views.api.php.

                                                     {
  // example code here
}

hook_views_form_substitutions (  ) 

This hook is called to get a list of placeholders and their substitutions, used when preprocessing a View with form elements.

Definition at line 575 of file views.api.php.

                                         {
  return array(
    '<!--views-form-example-substitutions-->' => 'Example Substitution',
  );
}

hook_views_form_validate ( form,
&$  form_state 
)

Views form (View with form elements) validate handler.

Called for all steps ($form_state['step']) of the multistep form.

Definition at line 585 of file views.api.php.

                                                       {
  // example code here
}

hook_views_plugins (  ) 

The full documentation for this hook is now in the advanced help.

This hook should be placed in MODULENAME.views.inc and it will be auto-loaded. MODULENAME.views.inc must be in the directory specified by the 'path' key returned by MODULENAME_views_api(), or the same directory as the .module file, if 'path' is unspecified.

This is a stub list as a reminder that this needs to be doc'd and is not used in views anywhere so might not be remembered when this is formally documented:

  • style: 'even empty'

Definition at line 252 of file views.api.php.

                              {
  // example code here
}

hook_views_plugins_alter ( &$  plugins  ) 

Alter existing plugins data, defined by modules.

Definition at line 259 of file views.api.php.

                                             {
  // Add apachesolr to the base of the node row plugin.
  $plugins['row']['node']['base'][] = 'apachesolr';
}

hook_views_post_build ( &$  view  ) 

This hook is called right after the build process.

The query is now fully built, but it has not yet been run through db_rewrite_sql.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after.

Definition at line 626 of file views.api.php.

                                       {
  // example code here
}

hook_views_post_execute ( &$  view  ) 

This hook is called right after the execute process.

The query has been executed, but the pre_render() phase has not yet happened for handlers.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after. Altering the content can be achieved by editing the items of $view->result.

Definition at line 650 of file views.api.php.

                                         {
  // example code here
}

hook_views_post_render ( &$  view,
&$  output,
&$  cache 
)

Post process any rendered data.

This can be valuable to be able to cache a view and still have some level of dynamic output. In an ideal world, the actual output will include HTML comment based tokens, and then the post process can replace those tokens.

Example usage. If it is known that the view is a node view and that the primary field will be a nid, you can do something like this:

And then in the post render, create an array with the text that should go there:

strtr($output, array('', 'output for FIELD of nid 1');

All of the cached result data will be available in $view->result, as well, so all ids used in the query should be discoverable.

This hook can be utilized by themes.

Definition at line 691 of file views.api.php.

                                                           {

}

hook_views_pre_build ( &$  view  ) 

This hook is called right before the build process, but after displays are attached and the display performs its pre_execute phase.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after.

Definition at line 615 of file views.api.php.

                                      {
  // example code here
}

hook_views_pre_execute ( &$  view  ) 

This hook is called right before the execute process.

The query is now fully built, but it has not yet been run through db_rewrite_sql.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after.

Definition at line 637 of file views.api.php.

                                        {
  // example code here
}

hook_views_pre_render ( &$  view  ) 

This hook is called right before the render process.

The query has been executed, and the pre_render() phase has already happened for handlers, so all data should be available.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after. Altering the content can be achieved by editing the items of $view->result.

This hook can be utilized by themes.

Definition at line 665 of file views.api.php.

                                       {
  // example code here
}

hook_views_pre_view ( &$  view,
&$  display_id,
&$  args 
)

This hook is called at the very beginning of views processing, before anything is done.

Adding output to the view can be accomplished by placing text on $view->attachment_before and $view->attachment_after.

Definition at line 604 of file views.api.php.

                                                           {
  // example code here
}

hook_views_preview_info_alter ( &$  rows,
view 
)

This hook should be placed in MODULENAME.views.inc and it will be auto-loaded.

MODULENAME.views.inc must be in the directory specified by the 'path' key returned by MODULENAME_views_api(), or the same directory as the .module file, if 'path' is unspecified.

Alter the rows that appear with a view preview, which include query and performance statistics. $rows is an associative array with two keys:

  • query: An array of rows suitable for theme('table'), containing information about the query and the display title and path.
  • statistics: An array of rows suitable for theme('table'), containing performance statistics.

Warning: $view is not a reference in PHP4 and cannot be modified here. But it IS a reference in PHP5, and can be modified. Please be careful with it.

See also:
theme_table

Definition at line 726 of file views.api.php.

                                                      {
  // example code here
}

hook_views_query_alter ( &$  view,
&$  query 
)

Stub hook documentation.

This hook should be placed in MODULENAME.views.inc and it will be auto-loaded. MODULENAME.views.inc must be in the directory specified by the 'path' key returned by MODULENAME_views_api(), or the same directory as the .module file, if 'path' is unspecified.

Definition at line 704 of file views.api.php.

                                                 {
  // example code here
}

hook_views_query_substitutions (  ) 

Stub hook documentation.

Definition at line 567 of file views.api.php.

                                          {
  // example code here
}

hook_views_ui_display_top_links_alter ( &$  links,
view,
display_id 
)

This hooks allows to alter the links at the top of the view edit form.

Some modules might want to add links there.

Parameters:
$links The links which will be displayed at the top of the view edit form.
view $view The full view object which is currently changed.
$display_id The current display id which is edited. For example that's 'default' or 'page_1'.

Definition at line 741 of file views.api.php.

                                                                            {
  // example code here
}