Skip to main content

How do you expose your legacy database tables to views in drupal 6 Part 2

Continuing from Part 1 of the post where we defined custom data table to make drupal aware of our legacy data, we also want to define custom filters that can be used by the views system to define conditional views.

in the hook_views_data() or our example code in part one, the candidate_views_data() function you can see that a field was defined as below:

    $data['candidate']['candidate_gender'] = array(
        'title' => t('Gender'),
        'field' => array(
          'click sortable' => TRUE,
        'filter' => array(
            'handler' => 'candidate_handler_filter_gender',

notice the filter key in the $data array, we want custom data to appear here, for example 'Male' and 'Female', so we have defined a custom handler by the name 'candidate_handler_filter_gender'.

to make drupal aware of your handler, you need to define them in hook_views_handlers() the definition will look something like this.

function candidate_views_handlers(){
    return array(
      'info' => array(
          'path' => drupal_get_path('module','candidate'). '/views',

      'handlers' => array(
          'candidate_handler_filter_gender' => array(
              'parent' => 'views_handler_filter_string',

having defined this handler, now you need to place a new file called in the earlier defined views sub folder. and the code that goes in this file is:

class candidate_handler_filter_gender extends views_handler_filter_string{
    function value_form(&$form, &$form_state) {

    $form['value'] = array(
    '#type' => 'select',
    '#title' => t('Gender'),
    '#options' => getGender(),

    return $form;


getGender() is a function that just returns a keyed array for 'M'=>'Male', 'F'=>'Female'.

Thats all, now your views interface should hook into your custom module and be aware of the tables, and custom handlers available. 

Remember to clear caches if something does not appear.


Popular posts from this blog

Create a drupal development environment using docker.

Currently at work i am using docker to streamline and speedup of development and deployment to testing and production, I am using symfony currently and our app is dockerised, i wanted to do the same for drupal based apps.

I searched for a official drupal docker repo and i did find this.

Unfortunately there was very terse explanation but pretty much worked, i found a few hiccups along the way so wanted to share what i did.

Install docker for your environment. Lots of details are available at explaing docker and installing docker for your environment.

The docker repo holds the drupal container at, following the instructions this is how to create the drupal container:

In order to use my code base we need to mount the volume with the -v directive as below, we do this in one command:

docker run -v /$HOME/work/drupal8:/var/www/html -p 8080:80 --name mydrupal -d drupal

this will create…

Use feeds module to import XML data in Drupal 7

Recently i had to setup a xml import process to import data from an external supplier on a regular basis, the filename and format was not changing and i could choose where to store the file. Following is how i set it up.

First we need to download the following modules

feeds admin ui

enable the above modules.

We will need a sample XML so this will be the one we will use for this demonstration:

<?xml version="1.0" encoding="utf-8" ?>
<!-- Sample for demonstration of processing XML feeds with feeds module -->

How do you expose your legacy database tables to views in drupal 6 Part 1

This is a 2 part post, that shows how I exposed a legacy table to views in drupal and used the incredible power of views to create many combinations static and conditional views. This was very helpful for my client.

I had a requirement that warranted exposing existing database table to views, so that views can contain data from this table.  To enable this to happen, the following steps need to be taken.
In a custom module you need to first define the views_api hook as following:
function candidate_views_api(){ $view = array(); $view = array('api' => 2, 'path' => drupal_get_path('module','candidate'). '/views'); return$view; }
candidate module was a custom module which I already had, so it made sense to add this hook here. 
The important bit here is telling the drupal sub-system where the views file will reside. 
Then create a file with your <modulename> in my case it was, this file should have two hooks, one …