function ext_search_page_search_query in Extended search page 7
Create the search page query.
Parameters
Entity $page: The page for which a search should be executed.
$keys: The keywords to search for.
$values: Filters values.
$sort: Field or array or field to sort with.
$offset:
$limit:
$search_id Seach API ID (cache ?):
Return value
SearchApiQueryInterface An object for searching on the page.
2 calls to ext_search_page_search_query()
- ext_search_node_ref_potential_references in ext_search_node_ref/
ext_search_node_ref.module - Fetch an array of all candidate referenced nodes.
- ext_search_page_search_execute in ./
ext_search_page.module - Executes a search.
File
- ./
ext_search_page.module, line 899 - Extended search page module.
Code
function ext_search_page_search_query($page, $keys, $values, $sort = FALSE, $limit = 50, $offset = 0, $search_id = NULL) {
if (!$search_id) {
// needed for cache
$search_id = 'ext_search_page:' . $page->path . ':' . md5(serialize($values));
}
$options = array(
'search id' => $search_id,
'search_api_page id' => $page->machine_name,
'parse mode' => $page->options['mode'],
);
if (!empty($page->options['search_api_spellcheck'])) {
$options['search_api_spellcheck'] = TRUE;
}
$query = search_api_query($page->index_id, $options)
->keys($keys)
->range($offset, $limit);
// refactor ext>
if (count($values)) {
// we call add condition callback (even for hidden widgets)
foreach (ext_search_page_get_filter_widgets($page) as $field => $widget) {
// call add condition callback.
$f = $widget['add_condition'];
$f($query, $field, $widget, isset($values[$field]) ? $values[$field] : null);
}
}
// <refactor ext
if (!empty($page->options['fields'])) {
$query
->fields($page->options['fields']);
}
if (!empty($page->options['language_filter'])) {
$languages = array_unique(array_map('_search_api_page_map_languages', $page->options['language_filter']));
if (count($languages) == 1) {
$query
->condition('search_api_language', reset($languages));
}
else {
$filter = $query
->createFilter('OR');
foreach ($languages as $lang) {
$filter
->condition('search_api_language', $lang);
}
$query
->filter($filter);
}
}
if ($sort) {
if (!is_array($sort)) {
$sort = array(
$sort,
);
}
foreach ($sort as $field => $order) {
if (!is_string($field)) {
$field = $order;
$order = 'ASC';
}
$query
->sort($field, $order);
}
}
return $query;
}