search_result.inc
File
-
plugins/
content_types/ search/ search_result.inc
View source
<?php
/**
* @file
*/
if (module_exists('search')) {
/**
* Plugins are described by creating a $plugin array which will be used
* by the system that includes this file.
*/
$plugin = array(
'single' => TRUE,
'title' => t('Search results'),
'icon' => 'icon_search.png',
'description' => t('The results of a search using keywords.'),
'required context' => new ctools_context_required(t('Keywords'), 'string'),
'category' => t('Widgets'),
'defaults' => array(
'type' => 'node',
'log' => TRUE,
'override_empty' => FALSE,
'empty_title' => '',
'empty' => '',
'empty_format' => filter_fallback_format(),
'override_no_key' => FALSE,
'no_key_title' => '',
'no_key' => '',
'no_key_format' => filter_fallback_format(),
),
);
}
/**
* Render the custom content type.
*/
function ctools_search_result_content_type_render($subtype, $conf, $panel_args, $context) {
$search_info = search_get_info();
if (empty($search_info[$conf['type']])) {
return;
}
$info = $search_info[$conf['type']];
$keys = NULL;
if (!empty($context) && isset($context->data)) {
$keys = $context->data;
}
$conditions = NULL;
if (isset($info['conditions_callback']) && function_exists($info['conditions_callback'])) {
// Build an optional array of more search conditions.
$conditions = $info['conditions_callback']($keys);
}
// Display nothing at all if no keywords were entered.
if (empty($keys) && empty($conditions)) {
if (!empty($conf['override_no_key'])) {
$block->title = $conf['no_key_title'];
$block->content = check_markup($conf['no_key'], $conf['no_key_format'], FALSE);
return $block;
}
return;
}
// Build the content type block.
$block = new stdClass();
$block->module = 'search';
$block->delta = 'result';
$results = '';
// Only search if there are keywords or non-empty conditions.
if ($keys || !empty($conditions)) {
// Collect the search results.
$results = search_data($keys, $info['module'], $conditions);
// A workaround for ApacheSolr.
// @todo see http://drupal.org/node/1343142#comment-5495248
// This workaround is to be removed when a better one can be written.
if (!empty($results['search_results']['#results'])) {
$results['#results'] = $results['search_results']['#results'];
}
}
if (!empty($conf['log'])) {
// Log the search keys:
watchdog('search', 'Searched %type for %keys.', array(
'%keys' => $keys,
'%type' => $info['title'],
), WATCHDOG_NOTICE, l(t('results'), $_GET['q']));
}
if (!empty($results['#results'])) {
$output = "<ol class=\"search-results {$conf['type']}-results\">\n";
foreach ($results['#results'] as $result) {
$output .= theme('search_result', array(
'result' => $result,
'module' => $conf['type'],
));
}
$output .= "</ol>\n";
$output .= theme('pager', array(
'tags' => NULL,
));
$block->title = t('Search results');
$block->content = $output;
}
else {
if (empty($conf['override_empty'])) {
$block->title = t('Your search yielded no results');
$block->content = search_help('search#noresults', drupal_help_arg());
}
else {
$block->title = $conf['empty_title'];
$block->content = check_markup($conf['empty'], $conf['empty_format'], FALSE);
}
}
return $block;
}
/**
* Returns an edit form for custom type settings.
*/
function ctools_search_result_content_type_edit_form($form, &$form_state) {
$conf = $form_state['conf'];
$types = array();
foreach (search_get_info() as $module => $info) {
$types[$module] = $info['title'];
}
$form['type'] = array(
'#type' => 'select',
'#title' => t('Search type'),
'#options' => $types,
'#default_value' => $conf['type'],
);
$form['log'] = array(
'#type' => 'checkbox',
'#default_value' => $conf['log'],
'#title' => t('Record a watchdog log entry when searches are made'),
);
$form['override_empty'] = array(
'#type' => 'checkbox',
'#default_value' => $conf['override_empty'],
'#title' => t('Override "no result" text'),
);
$form['empty_title'] = array(
'#title' => t('Title'),
'#type' => 'textfield',
'#default_value' => $conf['empty_title'],
'#dependency' => array(
'edit-override-empty' => array(
1,
),
),
);
$form['empty_field'] = array(
'#type' => 'text_format',
'#title' => t('No result text'),
'#default_value' => $conf['empty'],
'#format' => $conf['empty_format'],
'#dependency' => array(
'edit-override-empty' => array(
1,
),
),
);
$form['override_no_key'] = array(
'#type' => 'checkbox',
'#default_value' => $conf['override_no_key'],
'#title' => t('Display text if no search keywords were submitted'),
);
$form['no_key_title'] = array(
'#title' => t('Title'),
'#type' => 'textfield',
'#default_value' => $conf['no_key_title'],
'#dependency' => array(
'edit-override-no-key' => array(
1,
),
),
);
$form['no_key_field'] = array(
'#type' => 'text_format',
'#title' => t('No result text'),
'#default_value' => $conf['no_key'],
'#format' => $conf['no_key_format'],
'#dependency' => array(
'edit-override-no-key' => array(
1,
),
),
);
return $form;
}
/**
* Submit handler for search form.
*/
function ctools_search_result_content_type_edit_form_submit($form, &$form_state) {
// Copy the text_format values over to where we normally store them.
$form_state['values']['empty'] = $form_state['values']['empty_field']['value'];
$form_state['values']['empty_format'] = $form_state['values']['empty_field']['format'];
$form_state['values']['no_key'] = $form_state['values']['no_key_field']['value'];
$form_state['values']['no_key_format'] = $form_state['values']['no_key_field']['format'];
// Copy everything from our defaults.
foreach (array_keys($form_state['plugin']['defaults']) as $key) {
$form_state['conf'][$key] = $form_state['values'][$key];
}
}
/**
* Returns the administrative title for a type.
*/
function ctools_search_result_content_type_admin_title($subtype, $conf, $context) {
$info = search_get_info();
$type = isset($info[$conf['type']]['title']) ? $info[$conf['type']]['title'] : t('Missing/broken type');
return t('@type search result', array(
'@type' => $type,
));
}
Functions
Title | Deprecated | Summary |
---|---|---|
ctools_search_result_content_type_admin_title | Returns the administrative title for a type. | |
ctools_search_result_content_type_edit_form | Returns an edit form for custom type settings. | |
ctools_search_result_content_type_edit_form_submit | Submit handler for search form. | |
ctools_search_result_content_type_render | Render the custom content type. |