You are here

views_dynamic_fields.module in Views Dynamic Fields 7

Registers a views filter.

The view hook for registration of a new views filter that allows the user to choose the fields to be excluded from a displayed instance of a view.

File

views_dynamic_fields.module
View source
<?php

/**
 * @file
 * Registers a views filter.
 *
 * The view hook for registration of a new views filter that allows the user
 * to choose the fields to be excluded from a displayed instance of a view.
 */

/**
 * Implements hook_views_data_alter().
 */
function views_dynamic_fields_views_data_alter(&$data) {

  // Register a dummy field to attach the filter for nodes.
  $data['node']['dynamic-field'] = array(
    'title' => t('Dynamic Fields'),
    'help' => t("List of fields displayed in a view"),
    'filter' => array(
      'handler' => 'views_handler_filter_dynamic_fields',
    ),
  );

  // Register a dummy field to attach the filter for users.
  // @see http://drupal.org/node/1492166
  $data['users']['dynamic-field'] = array(
    'title' => t('Dynamic Fields'),
    'help' => t("List of fields displayed in a view"),
    'filter' => array(
      'handler' => 'views_handler_filter_dynamic_fields',
    ),
  );

  // Register a dummy field to attach the filter for commerce_products.
  // @see http://drupal.org/node/2289005
  $data['commerce_product']['dynamic-field'] = array(
    'title' => t('Dynamic Fields'),
    'help' => t("List of fields displayed in a view"),
    'filter' => array(
      'handler' => 'views_handler_filter_dynamic_fields',
    ),
  );
}

/**
 * Implements hook_theme().
 */
function views_dynamic_fields_theme() {
  $theme = array(
    'views_dynamic_fields_sort_filter_fields' => array(
      'render element' => 'form',
    ),
  );
  return $theme;
}

/**
 * Theme a drag-sortable table of fields in the exposed filter.
 */
function theme_views_dynamic_fields_sort_filter_fields($variables) {
  $form = $variables['form'];
  drupal_add_tabledrag('views-dynamic-fields-filters-table-sort', 'order', 'self', 'sort');

  // Weight for sortable tables.
  // @see http://drupal.org/node/935910
  // @see https://www.drupal.org/node/2327893
  $header = array(
    t('Select'),
    t('Field'),
    t('Weight'),
  );
  $rows = array();
  foreach (element_children($form) as $key) {

    // This is important.
    // We need to start with an empty element for the drag handle.
    $row = array();

    // Add class to group weight fields for drag and drop.
    $form[$key]['sort']['#attributes']['class'] = array(
      'sort',
    );
    $row[] = drupal_render($form[$key]['check']);
    $row[] = drupal_render($form[$key]['title']);
    $row[] = drupal_render($form[$key]['sort']);

    // Note the difference between $row and $rows.
    $rows[] = array(
      'data' => $row,
      'class' => array(
        'draggable',
      ),
    );
  }
  $output = theme('table', array(
    'header' => $header,
    'rows' => $rows,
    'attributes' => array(
      'id' => 'views-dynamic-fields-filters-table-sort',
    ),
  ));
  $output .= drupal_render_children($form);
  return $output;
}

Functions

Namesort descending Description
theme_views_dynamic_fields_sort_filter_fields Theme a drag-sortable table of fields in the exposed filter.
views_dynamic_fields_theme Implements hook_theme().
views_dynamic_fields_views_data_alter Implements hook_views_data_alter().