Tag: drupal modules

Custom Drupal Modules – creating filters for Views

Posted by – July 3, 2008

Continuing my exploration of custom modules and views, here is my code for allowing view builders to filter entries based on a status field, say "special offers", that is represented in our module's database table by an integer with 1 for true or 0 for false.

Add this key to your array entry for a table, at the same level as the "join" key. See my earlier post for how the rest of the array works.

In this case, the database column is called "is_special_offer". The keys you should supply are discussed here in the Views handbook.

‘filters’ => array(
  ‘is_special_offer’ => array(
    ‘name’ => ‘Product: Is Special Offer’,
    ‘operator’ => ‘views_handler_operator_eqneq’,
    ‘list’ => ‘views_handler_operator_yesno’,
    ‘list-type’ => ‘select’,
    ‘help’ => t(‘Show only Special Offers’),
  )
)

Custom Drupal Modules and Views

Posted by – June 26, 2008

I'm working with a client on a Drupal site where another programmer has implemented several custom content types via a module, not CCK. I'm researching how to integrate this with the Views module, and found this useful information so far.

The hook of note seems to be hook_views_tables to get the view editing interface to know about the columns in our custom table.

Here is the start of a function to return the information to the Views module. In this example we use product_id as the primary key of our table, which is the same as the node's nid. This only exposes the name of the product to the view, but more columns and tables will be added later.

// hook to tell views about our tables
function mymodule_views_tables() {
  $tables['mymodule_product'] = array(
    'name' => 'mymodule_product',
    'join' => array(
      'left' => array(
        'table' => 'node',
        'field' => 'nid'
      ),
      'right' => array(
        'field' => 'product_id'
      )
    ),
    'fields' => array(
      'name' => array('name' => t('Product: Name'),
      'sortable' => TRUE),
    ),
  );
  return $tables;
}