Search Hook

Available Since: v1.1 (September 2009)

Explanation

The hook_search method opens a module class to make it searchable to our SmartSearch module. By defining a public method called “hook_search” in your module’s primary class, you effectively tell the system how it should search your module. While this can be a complicated search involving numerous joins of supporting data - see the Projects module for an example - it can be quite simple also.

Each of the fields is relatively self-explanatory:

Example

A simple example from the Links Module

public function hook_search()
{
    $search['table'] = 'links';
    $search['table_alias'] = 'l';
    $search['table_module'] = 'links';
    $search['table_key'] = 'link_id'; // primary key in searched table
    $search['table_link'] = 'index.php?m=links&a=addedit&link_id='; // first part of link
    $search['table_title'] = 'Links';
    $search['table_orderby'] = 'link_name';
    $search['search_fields'] = array('l.link_name', 'l.link_url', 'l.link_description');
    $search['display_fields'] = $search['search_fields'];

    return $search;
}

A more complex example from the Project Module:

public function hook_search() {
    $search['table'] = 'projects';
    $search['table_alias'] = 'p';
    $search['table_module'] = 'projects';
    $search['table_key'] = 'p.project_id'; // primary key in searched table
    $search['table_link'] = 'index.php?m=projects&a=view&project_id='; // first part of link
    $search['table_title'] = 'Projects';
    $search['table_orderby'] = 'project_name';
    $search['search_fields'] = array(
        'p.project_id', 'p.project_name',
        'p.project_short_name', 'p.project_location', 'p.project_description',
        'p.project_url', 'p.project_demo_url'
    );
    $search['display_fields'] = $search['search_fields'];
    $search['table_joins'] = array(
        array(
            'table' => 'project_contacts',
            'alias' => 'pc',
            'join' => 'p.project_id = pc.project_id'
        )
    );

    return $search;
}

As you should be able to tell, this code does not perform the search. Instead, it simply tells the calling code how to search this module.

Assuming this method exists and includes the proper values, the SmartSearch module will automatically call this function. No further configuration is necessary.


Available Hooks

Hooks are how we provide access to specific features and functionality in a standardized way. While no hooks are required in your custom module, they’re generally useful.

Available Since v3.0 (September 2013)

  • Workflow Hooks (pre-create, post-create, pre-delete, post-delete, pre-load, post-load, pre-store, post-store, pre-update, post-update)

Available Since v1.1 (September 2009)

  • Calendar Hook
  • Cron Hook
  • Search Hook