finder_search.module

  1. finder
    1. 6.x-1.x
    2. 7.x-1.x

Version 1.1.2.56 (checked in on 2011/02/12 at 06:55:19 by danielb)

The finder search module.

Functions & methods

NameDescription
finder_search_form_finder_admin_edit_alterImplements hook_form_FORM_ID_alter().
finder_search_get_resultGet results array from search module.
finder_search_get_themed_resultsGet themed version of search results.
finder_search_preprocess_finder_resultsIntervene before theme function.
finder_search_themeImplements hook_theme().
finder_search_theme_registry_alterImplements hook_theme_registry_alter().
theme_finder_search_resultsTheme search results for finder.
View source
<?php
// $Id: finder_search.module,v 1.1.2.56 2011/02/12 06:55:19 danielb Exp $

/**
 * @file
 * The finder search module.
 */

/**
 * Implements hook_theme().
 *
 * @see hook_theme()
 */
function finder_search_theme() {
  return array(
    'finder_search_results' => array(
      'variables' => array(
        'results' => NULL,
        'finder' => NULL,
        'form_state' => NULL,
        'no_results' => NULL,
      ),
    ),
  );
}

/**
 * Implements hook_form_FORM_ID_alter().
 *
 * @see hook_form_FORM_ID_alter()
 */
function finder_search_form_finder_admin_edit_alter(&$form, $form_state) {
  $finder = &$form_state['storage']['finder'];

  $form['settings']['advanced']['search'] = array(
    '#type' => 'radios',
    '#title' => t('Use search module'),
    '#default_value' => isset($finder->settings['advanced']['search']) ? $finder->settings['advanced']['search'] : 0,
    '#weight' => 50,
    '#options' => array(
      0 => t('Do not use search module.'),
      1 => t('Attempt to fetch results from a content search when finder results are empty.'),
    ),
  );
  $form['settings']['advanced']['search_tab'] = array(
    '#type' => 'textfield',
    '#title' => t('Search module tab'),
    '#default_value' => isset($finder->settings['advanced']['search_tab']) ? $finder->settings['advanced']['search_tab'] : 'node',
    '#required' => TRUE,
    '#weight' => 55,
    '#description' => t('Which tab to use in the search module.  Default is <em>node</em>.'),
  );

}

/**
 * Implements hook_theme_registry_alter().
 *
 * @see hook_theme_registry_alter()
 */
function finder_search_theme_registry_alter(&$theme_registry) {
  global $theme_info;
  $theme_funcs = variable_get('finder_search_finder_results_theme', array());

  // This is to fix upgrade from <= 6.x-1.5 to 6.x-1.7
  if (!is_array($theme_funcs)) {
    $theme_funcs = array();
  }

  $theme_funcs[$theme_info->name] = $theme_registry['finder_results']['function'];
  variable_set('finder_search_finder_results_theme', $theme_funcs);
  $theme_registry['finder_results']['function'] = 'finder_search_preprocess_finder_results';
}

/**
 * Intervene before theme function.
 *
 * Kind of like a template preprocess, except not for a template.
 *
 * @see finder_search_theme_registry_alter()
 */
function finder_search_preprocess_finder_results($variables) {
  extract($variables);
  global $theme_info;
  $theme_funcs = variable_get('finder_search_finder_results_theme', array());
  $theme_func = !empty($theme_funcs[$theme_info->name]) ? $theme_funcs[$theme_info->name] : 'theme_finder_results';

  if (isset($finder->settings['advanced']['search']) && $finder->settings['advanced']['search'] && empty($results)) {
    $keys = array();
    foreach ($keywords as $finder_element_id => $finder_element_keywords) {
      foreach ((array)$finder_element_keywords as $keyword) {
        $keys[] = $keyword;
      }
    }
    $results_array = finder_search_get_result(implode(' ', $keys), $finder->settings['advanced']['search_tab']);
    $results = theme('finder_search_results', array('results' => $results_array, 'finder' => $finder, 'form_state' => $form_state, 'no_results' => $no_results));

    // search module has it's own pager
    $pager = 0;
  }

  return $theme_func(array('results' => $results, 'finder' => $finder, 'keywords' => $keywords, 'pager' => $pager, 'params' => $params, 'form_state' => $form_state, 'no_results' => $no_results));

}

/**
 * Get results array from search module.
 */
function finder_search_get_result($keys = NULL, $type = 'node') {
  if (isset($keys)) {
    if (module_hook($type, 'search')) {
      return module_invoke($type, 'search', 'search', $keys);
    }
  }
}

/**
 * Get themed version of search results.
 *
 * @param $results
 *   An array of result objects.
 * @return
 *   Themed output from search module's hooks.
 */
function finder_search_get_themed_results($results) {
  $output = '';
  if (isset($results) && is_array($results) && count($results)) {
    if (module_hook($type, 'search_page')) {
      $output .= module_invoke($type, 'search_page', $results);
    }
    else {
      $output .= theme('search_results', $results, $type);
    }
  }
  return $output;
}

/**
 * Theme search results for finder.
 *
 * @param $results
 *   An array of result objects.
 * @param $finder
 *   The finder object.
 * @param $form_state
 *   The Forms API form state.
  * @param $no_results
 *   The output to show when there are no results.
 */
function theme_finder_search_results($variables) {
  extract($variables);
  $output = '';
  if ($results) {
    $output .= finder_search_get_themed_results($results);
  }
  else {
    $output .= $no_results;
  }
  return $output;
}

// to do:
// - ability to exclude certain fields/elements from being included in the search keywords

Post new comment

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

Type the characters you see in this picture. (verify using audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.