class date_views_plugin_pager

  1. nittany7 modules/contrib/date/date_views/includes/ date_views_plugin_pager
  2. cis7 modules/contrib/date/date_views/includes/ date_views_plugin_pager
  3. mooc7 modules/contrib/date/date_views/includes/ date_views_plugin_pager

Example plugin to handle paging by month.


Expanded class hierarchy of date_views_plugin_pager


Contains filters are case sensitive
Namesort descending Modifiers Type Description
date_views_plugin_pager::date_forbid function Add a callback to determine if we have moved outside the valid date range for this argument.
date_views_plugin_pager::has_more_records function Because we don't know how many pages there are, we never believe there are more records. Overrides views_plugin_pager::has_more_records
date_views_plugin_pager::options_form function Provide a form to edit options for this plugin. Overrides views_plugin::options_form
date_views_plugin_pager::option_definition function Tell Views what options this plugin can store. Overrides views_object::option_definition
date_views_plugin_pager::query function Transfer date information from the argument to the view so the pager theme can use it and update the date argument value to whatever is set by the pager. Overrides views_plugin_pager::query
date_views_plugin_pager::render function Render the pager. Overrides views_plugin_pager::render
date_views_plugin_pager::summary_title function Return a string to display as the clickable title for the pager plugin. Overrides views_plugin_pager::summary_title
date_views_plugin_pager::use_count_query function This kind of pager does not need to count the number of records. Overrides views_plugin_pager::use_count_query
views_object::construct function Views handlers use a special construct function so that we can more easily construct them with variable arguments.
views_object::destroy function
views_object::export_option function
views_object::export_options function
views_object::export_option_always function Always exports the option, regardless of the default value.
views_object::options function Set default options on this object. Called by the constructor in a complex chain to deal with backward compatibility.
views_object::set_default_options function Set default options. For backward compatibility, it sends the options array; this is a feature that will likely disappear at some point.
views_object::set_definition function Let the handler know what its full definition is.
views_object::unpack_options function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable function Unpack a single option definition.
views_object::unpack_translatables function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults function
views_plugin::additional_theme_functions function Provide a list of additional theme functions for the theme information page
views_plugin::plugin_title function Return the human readable name of the display.
views_plugin::theme_functions function Provide a full list of possible theme templates used by this style.
views_plugin::validate function Validate that the plugin is correct and can be saved.
views_plugin_pager::execute_count_query function Execute the count query, which will be done just prior to the query itself being executed.
views_plugin_pager::exposed_form_alter function
views_plugin_pager::exposed_form_submit function
views_plugin_pager::exposed_form_validate function
views_plugin_pager::get_current_page function Get the current page.
views_plugin_pager::get_items_per_page function Get how many items per page this pager will display.
views_plugin_pager::get_offset function Get the page offset, or how many items to skip.
views_plugin_pager::get_pager_id function Get the pager id, if it exists
views_plugin_pager::get_total_items function Get the total number of items.
views_plugin_pager::init function Initialize the plugin.
views_plugin_pager::items_per_page_exposed function
views_plugin_pager::offset_exposed function
views_plugin_pager::options_submit function Provide the default form form for submitting options
views_plugin_pager::options_validate function Provide the default form form for validating options
views_plugin_pager::post_execute function Perform any needed actions just after the query executing.
views_plugin_pager::pre_execute function Perform any needed actions just prior to the query executing.
views_plugin_pager::pre_render function Perform any needed actions just before rendering.
views_plugin_pager::set_current_page function Set the current page.
views_plugin_pager::set_items_per_page function Set how many items per page this pager will display.
views_plugin_pager::set_offset function Set the page offset, or how many items to skip.
views_plugin_pager::update_page_info function If there are pagers that need global values set, this method can be used to set them. It will be called when the count query is run.
views_plugin_pager::uses_exposed function
views_plugin_pager::use_pager function Determine if this pager actually uses a pager.


modules/contrib/date/date_views/includes/, line 49
Date pager. Works with a Date argument, the argument filters the view and the pager provides back/next navigation.

View source
class date_views_plugin_pager extends views_plugin_pager {

   * This kind of pager does not need to count the number of records.
  function use_count_query() {
    return FALSE;

   * Because we don't know how many pages there are, we never believe there are more records.
  function has_more_records() {
    return FALSE;

   * Tell Views what this pager's setting is.
  function summary_title() {
    return t("Position: @position, format: @format.", array('@position' => $this->options['pager_position'], '@format' => $this->options['link_format']));

   * Tell Views what options this plugin can store.
  function option_definition() {
    $options = parent::option_definition();
    $options['date_id'] = array('default' => 'date');
    $options['pager_position'] = array('default' => 'top');
    $options['link_format'] = array('default' => 'pager');
    $options['date_argument'] = array('default' => 'Unknown');
    $options['granularity'] = array('default' => 'Unknown');
    return $options;

   * Provide the form for setting options.
  function options_form(&$form, &$form_state) {
    $form['markup']['#markup'] = t('This pager works together with a Date or Content date field contextual filter. If a Date filter has been added to the view, this pager will provide back/next paging to match the granularity of that filter (i.e. paging by year, month, week, or day). The filter must also be configured to use a DATE default value. If there is no Date contextual filter on this view, or if it has not been set to use a default date, the pager will not appear.');
    $form['date_id'] = array(
      '#title' => t('Date identifier'),
      '#type' => 'textfield',
      '#description' => t('The query identifier to use when fetching date data from in the URL. Note that if you have more than one display in the same view that uses the date pager (like a page and a block), the pager id must be different for each one or both will change when the pager value changes.'),
      '#default_value' => $this->options['date_id'],
      '#required' => TRUE,
    $form['pager_position'] = array(
      '#title' => t('Pager position'),
      '#type' => 'select',
      '#options' => array(
        'bottom' => t('Bottom'),
        'top' => t('Top'),
        'both' => t('Both'),
      '#description' => t('Where to place the date pager, on the top, bottom, or both top and bottom of the content.'),
      '#default_value' => $this->options['pager_position'],
      '#required' => TRUE,
    $form['link_format'] = array(
      '#title' => t('Link format'),
      '#type' => 'select',
      '#options' => array(
        'pager' => t('Pager'),
        'clean' => t('Clean URL'),
      '#description' => t("The format for pager link urls. With the Pager format, the links look like 'calendar/?date=2020-05'. The Clean URL format links look like 'calendar/2020-05'. The Clean format links look nicer but the Pager format links are likely to work better if the calendar is used in blocks or panels."),
      '#default_value' => $this->options['link_format'],
      '#required' => TRUE,
    $form['date_argument']['#type'] = 'hidden';
    $form['date_argument']['#value'] = $this->options['date_argument'];
    $form['granularity']['#type'] = 'hidden';
    $form['granularity']['#value'] = $this->options['granularity'];

   * Transfer date information from the argument to the view so the pager theme can use it
   * and update the date argument value to whatever is set by the pager.
  function query() {

    // By fetching our data from the exposed input, it is possible to
    // feed pager data through some method other than $_GET.
    $input = $this->view->get_exposed_input();
    $value = NULL;
    if (!empty($input) && !empty($input[$this->options['date_id']])) {
      $value = $input[$this->options['date_id']];

    // Bring the argument information into the view so our theme can access it.
    $i = 0;
    foreach ($this->view->argument as $id => &$argument) {
      if (date_views_handler_is_date($argument, 'argument')) {

        // If the argument is empty, nothing to do. This could be from
        // an argument that does not set a default value.
        if (empty($argument->argument) || empty($argument->date_handler)) {

        // Storing this information in the pager so it's available for summary info.
        // The view argument information is not otherwise accessible to the pager.
        // Not working right yet, tho.
        $date_handler = $argument->date_handler;
        $this->options['date_argument'] = $id;
        $this->options['granularity'] = $argument->date_handler->granularity;

        // Reset values set by argument if pager requires it.
        if (!empty($value)) {
          $argument->argument = $value;
          $argument->date_range = $argument->date_handler->arg_range($value);
          $argument->min_date = $argument->date_range[0];
          $argument->max_date = $argument->date_range[1];
          // $argument->is_default works correctly for normal arguments, but does not
          // work correctly if we are swapping in a new value from the pager.
          $argument->is_default = FALSE;

        // The pager value might move us into a forbidden range, so test it.
        if ($this->date_forbid($argument)) {
          $this->view->build_info['fail'] = TRUE;

        if (empty($this->view->date_info)) {
          $this->view->date_info = new stdClass();
        $this->view->date_info->granularity = $argument->date_handler->granularity;
        $format = $this->view->date_info->granularity == 'week' ? DATE_FORMAT_DATETIME : $argument->sql_format;
        $this->view->date_info->placeholders = isset($argument->placeholders) ? $argument->placeholders : $argument->date_handler->placeholders;
        $this->view->date_info->date_arg = $argument->argument;
        $this->view->date_info->date_arg_pos = $i;
        $this->view->date_info->year = date_format($argument->min_date, 'Y');
        $this->view->date_info->month = date_format($argument->min_date, 'n');
        $this->view->date_info->day = date_format($argument->min_date, 'j');
        $this->view->date_info->week = date_week(date_format($argument->min_date, DATE_FORMAT_DATE));
        $this->view->date_info->date_range = $argument->date_range;
        $this->view->date_info->min_date = $argument->min_date;
        $this->view->date_info->max_date = $argument->max_date;
        $this->view->date_info->limit = $argument->limit;
        $this->view->date_info->url = $this->view->get_url();
        $this->view->date_info->pager_id = $this->options['date_id'];
        $this->view->date_info->date_pager_position = $this->options['pager_position'];
        $this->view->date_info->date_pager_format = $this->options['link_format'];

    // Is this a view that needs to be altered based on a pager value?
    // If there is pager input and the argument has set the placeholders,
    // swap the pager value in for the placeholder set by the argument.
    if (!empty($value) && !empty($this->view->date_info->placeholders)) {
      $placeholders = $this->view->date_info->placeholders;
      $count = count($placeholders);
      foreach ($this->view->query->where as $group => $data) {
        foreach ($data['conditions'] as $delta => $condition) {
          if (array_key_exists('value', $condition) && is_array($condition['value'])) {
            foreach ($condition['value'] as $placeholder => $placeholder_value) {
              if (array_key_exists($placeholder, $placeholders)) {
                // If we didn't get a match, this is a > $min < $max query that uses the view
                // min and max dates as placeholders.
                $date = ($count == 2) ? $this->view->date_info->min_date : $this->view->date_info->max_date;
                $next_placeholder = array_shift($placeholders);
                $this->view->query->where[$group]['conditions'][$delta]['value'][$placeholder] = $date->format($format);

   * Add a callback to determine if we have moved outside the valid date range for this argument.
  function date_forbid($argument) {
    // See if we're outside the allowed date range for our argument.
    $limit = date_range_years($argument->options['year_range']);
    if (date_format($argument->min_date, 'Y') < $limit[0] || date_format($argument->max_date, 'Y') > $limit[1]) {
      return TRUE;
    return FALSE;

  function render($input) {
    // This adds all of our template suggestions based upon the view name and display id.
    $pager_theme = views_theme_functions('date_views_pager', $this->view, $this->display);
    return theme($pager_theme, array('plugin' => $this, 'input' => $input));