array(
'label' => t('Search'),
'adapter' => 'search',
'url processor' => 'standard',
'types' => array('node'),
'path' => 'admin/config/search/settings',
'supports facet missing' => TRUE,
'supports facet mincount' => TRUE,
'include default facets' => TRUE,
),
);
}
/**
* Allows for alterations to the searcher definitions.
*
* @param array &$searcher_info
* The return values of hook_facetapi_searcher_info() implementations.
*
* @see hook_facetapi_searcher_info()
*/
function hook_facetapi_searcher_info_alter(array &$searcher_info) {
$searcher_info['search']['label'] = t('Core search module');
}
/**
* Define all realms provided by the module.
*
* A realm is a group of facets that are rendered in a similar fashion. For
* example, the "block" realm displays each facet in a separate block, whereas
* the "fieldset" realm displays facets as form elements in a fieldset under the
* search form.
*
* @return array
* An associative array keyed by unique name of the realm. Each realm is an
* associative array containing:
* - label: The human readable name of the realm displayed in the admin UI.
* - description: The description of the realm displayed in the admin UI.
* - element type: The type of element facets are rendered as, such as "links"
* or "form elements".
* - default widget: The default widget plugin id for facets.
* - settings callback: (optional) A callback that alters the realm settings
* form, defaults to FALSE meaning no callback is defined.
* - sortable: (optional) Whether the facets can be sorted via the admin UI,
* defaults to TRUE.
* - weight: (optional) The weight of the realm's menu item in comparison to
* the others, defaults to 0.
*/
function hook_facetapi_realm_info() {
return array(
'block' => array(
'label' => t('Blocks'),
'sortable' => FALSE,
'weight' => -10,
'default widget' => 'facetapi_links',
'element type' => 'links',
'settings callback' => 'facetapi_block_realm_settings',
'description' => t(
'The Blocks realm displays each facet in a separate block. Users are able to refine their searches in a drill-down fashion.',
array('@block-page' => url('admin/structure/block', array('query' => array('destination' => current_path()))))
),
),
);
}
/**
* Allows for alterations to the realm definitions.
*
* @param array &$realm_info
* The return values of hook_facetapi_realm_info() implementations.
*
* @see hook_facetapi_realm_info()
*/
function hook_facetapi_realm_info_alter(array &$realm_info) {
$realm_info['block']['weight'] = 5;
}
/**
* Define all facets provided by the module.
*
* Facets correspond with fields in the search index and are usually related to
* entity properties and fields. However, it is not a requirement that the
* source data be stored in Drupal. For example, if you are indexing external
* RSS feeds, facets can be defined that filter by the field in the index that
* stores the publication dates.
*
* @param array $searcher_info
* The definition of the searcher that facets are being collected for.
*
* @return array
* An associative array keyed by unique name of the facet. Each facet is an
* associative array containing:
* - name: Machine readable name of the facet.
* - label: Human readable name of the facet displayed in settings forms.
* - description: Description of the facet displayed in settings forms.
* - field: The field name used by the backend to store and retrieve data from
* the search index it is associated with. Defaults to the machine name of
* the facet.
* - field alias: The query string variable inside of the filter key used to
* pass the filter information through the query string. Defaults to the
* machine name of the facet.
* - field api name: (optional) The machine readable name of the Field API
* field data the facet is associated with, FALSE if it is not associated
* with a field.
* - field api bundles: (optional) An array of entity names that this field
* contains bundle information for. Defaults to an empty array.
* - query types: The query type plugins that that this facet supports. For
* example, numeric fields support "term" and "range_filter" queries.
* - alter callbacks: (optional) Callbacks that alter the initialized render
* array returned by the query type plugin. Defaults to an empty array.
* - dependency plugins: (optional) An array of dependency plugin IDs that are
* supported by this facet.
* - default widget: (optional) The widget plugin ID used if no plugin has
* been selected or the one selected is not valid. Defaults to FALSE which
* sets the default widget as the one defined by the realm.
* - allowed operators: (optional) An array keyed by operator constant to
* boolean values specifying whether the operator is supported. Defaults to
* an array containing:
* - FACETAPI_OPERATOR_AND: TRUE
* - facet missing allowed: (optional) Whether or not missing facets are
* allowed for this facet. Defaults to FALSE.
* - facet mincount allowed: (optional) Whether or not the facet supports the
* "minimum facet count" setting. Defaults to FALSE.
* - weight: (optional) The weight of the facet. Defaults to 0.
* - map callback: (optional) The callback used to map the raw values returned
* by the index to something human readable. Defaults to FALSE
* - map options: (optional) An array of options passed to the map callback,
* defaults to en empty array.
* - hierarchy callback: (optional) A callback that maps the parent / child
* relationships of the facet data, defaults to FALSE meaning the list is
* flat.
* - values callback: (optional) In instances where facet data is not returned
* by the backend, provide a list of values that can be used. Defaults to
* FALSE.
* - min callback: (optional) For facets containing ranges, a callback
* returning the minimum value in the index. Defaults to FALSE.
* - max callback: (optional) For facets containing ranges, a callback
* returning the maximum value in the index. Defaults to FALSE.
* - default sorts: (optional) An array of available sorts. Each item is an
* array containing two values, the first being the item being filtered on,
* the second being the SORT_* constant. Defaults to an array containing:
* - active: SORT_DESC
* - count: SORT_DESC
* - display: SORT_ASC
*/
function hook_facetapi_facet_info(array $searcher_info) {
$facets = array();
// Facets are usually associated with the type of content stored in the index.
if (isset($searcher_info['types']['my_type'])) {
$facets['my_field'] = array(
'name' => 'my_field',
'label' => t('My field'),
'description' => t('My field index some content we can facet by.'),
'field' => 'my_field_index_field_name',
'field alias' => 'my_alias',
'field api name' => FALSE,
'field api bundles' => array(),
'query types' => array('term', 'date'),
'dependency plugins' => array('role'),
'default widget' => 'links',
'allowed operators' => array(FACETAPI_OPERATOR_AND => TRUE, FACETAPI_OPERATOR_OR => TRUE),
'facet missing allowed' => FALSE,
'facet mincount allowed' => FALSE,
'weight' => 0,
'map callback' => 'mymodule_map_my_field',
'map options' => array('field_option_1', 'field_option_2'),
'hierarchy callback' => FALSE,
'values callback' => FALSE,
'min callback' => FALSE,
'max callback' => FALSE,
'default sorts' => array(
array('active', SORT_DESC),
array('count', SORT_DESC),
array('display', SORT_ASC),
),
);
}
return $facets;
}
/**
* Allows for alterations to the facet definitions.
*
* @param array &$facet_info
* The return values of hook_facetapi_facet_info() implementations.
* @param array $searcher_info
* The definition of the searcher that facets are being collected for.
*
* @see hook_facetapi_facet_info()
*/
function hook_facetapi_facet_info_alter(array &$facet_info, array $searcher_info) {
// Change the author index field for Apache Solr searchers indexing node data.
if ('apachesolr' == $searcher_info['adapter'] && isset($searcher_info['types']['node'])) {
$facet_info['author']['field'] = 'is_uid';
}
}
/**
* Allows for alterations of the facets on the fly, without caching.
*
* @param array &$enabled_facets
* The return facets, which enabled for current search.
* @param $searcher
* The machine readable name of the searcher.
* @param $realm_name
* The machine readable name of the realm.
*/
function hook_facetapi_enabled_facets_alter(array &$enabled_facets, $searcher, $realm_name) {
if ($searcher == 'something') {
// Put facet1 to the end.
if (!empty($enabled_facets['facet1'])) {
$facet1 = $enabled_facets['facet1'];
unset($enabled_facets['facet1']);
$enabled_facets['facet1'] = $facet1;
}
}
}
/**
* Define all facets sorting algorithms provided by the module.
*
* Sorts are applied in the FacetapiWidget::sortFacet() method which is called
* by FacetapiWidget::init().
*
* @return array
* An associative array keyed by unique name of the sort. Each sort is an
* associative array containing:
* - title: The human readable name of the sort displayed in the admin UI.
* - callback: The uasort() callback the render array is passed to.
* - description: The description of the sort displayed in the admin UI.
* - requirements: An array of requirements that must pass in order for this
* sort to be displayed. Requirements are associative arrays keyed by
* function to requirement options. Optional.
* - weight: (optional) The default weight of the sort specifying its
* default processing order. Defaults to 0.
*
* @see FacetapiWidget::init()
* @see FacetapiWidget::sortFacet()
*/
function hook_facetapi_sort_info() {
$sorts = array();
$sorts['active'] = array(
'label' => t('Facet active'),
'callback' => 'facetapi_sort_active',
// @see: facetapi_get_available_sorts().
'requirements' => array('facetapi_sort_active_requirements' => TRUE),
'description' => t('Sort by whether the facet is active or not.'),
'weight' => -50,
);
return $sorts;
}
/**
* Allows for alterations to the sort definitions.
*
* @param array &$sort_info
* The return values of hook_facetapi_sort_info() implementations.
*
* @see hook_facetapi_sort_info()
*/
function hook_facetapi_sort_info_alter(array &$sort_info) {
$sort_info['active']['weight'] = 10;
}
/**
* Define all adapter plugins provided by the module.
*
* See the FacetapiAdapter docblock for more information on what an adapter does
* and how it interacts with the implementing search module.
*
* @return array
* An associative array keyed by unique name of the adapter. Each adapter is
* an associative array keyed by "handler" containing:
* - class: The name of the plugin class.
*
* @see FacetapiAdapter
*/
function hook_facetapi_adapters() {
return array(
'apachesolr' => array(
'handler' => array(
'class' => 'FacetapiApachesolrFacetapiAdapter',
),
),
);
}
/**
* Define all dependency plugins provided by the module.
*
* See the FacetapiDependency docblock for more information on what dependency
* plugins do and what their responsibilities are.
*
* @return array
* An associative array keyed by unique name of the dependency. Each
* dependency is an associative array keyed by "handler" containing:
* - label: The human readable name of the plugin displayed in the admin UI.
* - class: The name of the plugin class.
*
* @see FacetapiDependency
*/
function hook_facetapi_dependencies() {
return array(
'bundle' => array(
'handler' => array(
'label' => t('Content types'),
'class' => 'FacetapiDependencyBundle',
),
),
);
}
/**
* Define all empty behavior plugins provided by the module.
*
* See the FacetapiEmptyBehavior docblock for more information on what empty
* behavior plugins do and what their responsibilities are.
*
* @return array
* An associative array keyed by unique name of the empty behavior. Each empty
* behavior is an associative array keyed by "handler" containing:
* - label: The human readable name of the plugin displayed in the admin UI.
* - class: The name of the plugin class.
*
* @see FacetapiEmptyBehavior
*/
function hook_facetapi_empty_behaviors() {
return array(
'none' => array(
'handler' => array(
'label' => t('Do not display facet'),
'class' => 'FacetapiEmptyBehaviorNone',
),
),
);
}
/**
* Define all filter plugins provided by the module.
*
* See the FacetapiFilter docblock for more information on what filter plugins
* do and what their responsibilities are.
*
* @return array
* An associative array keyed by unique name of the filter. Each filter is an
* associative array keyed by "handler" containing:
* - label: The human readable name of the plugin displayed in the admin UI.
* - class: The name of the plugin class.
*
* @see FacetapiFilter
*/
function hook_facetapi_filters() {
return array(
'active_items' => array(
'handler' => array(
'label' => t('Do not display active items'),
'class' => 'FacetapiFilterActiveItems',
),
),
);
}
/**
* Define all query type plugins provided by the module.
*
* See the FacetapiQueryTypeInterface docblock for more information on what
* query type plugins do and what their responsibilities are.
*
* @return array
* An associative array keyed by unique name of the query type. Each query
* type is an associative array keyed by "handler" containing:
* - class: The name of the plugin class.
* - adapter: The adapter that the query type plugin is associated with.
*
* @see FacetapiQueryTypeInterface
*/
function hook_facetapi_query_types() {
return array(
'apachesolr_term' => array(
'handler' => array(
'class' => 'FacetapiApachesolrTerm',
'adapter' => 'apachesolr',
),
),
);
}
/**
* Define all URL processor plugins provided by the module.
*
* See the FacetapiUrlProcessor docblock for more information on what url
* processor plugins do and what their responsibilities are.
*
* @return array
* An associative array keyed by unique name of the URL processor. Each URL
* processor is an associative array keyed by "handler" containing:
* - label: The human readable name of the plugin displayed in the admin UI.
* - class: The name of the plugin class.
*
* @see FacetapiUrlProcessor
*/
function hook_facetapi_url_processors() {
return array(
'standard' => array(
'handler' => array(
'label' => t('Standard URL processors'),
'class' => 'FacetapiUrlProcessorStandard',
),
),
);
}
/**
* Define all widget plugins provided by the module.
*
* See the FacetapiWidget docblock for more information on what widget plugins
* do and what their responsibilities are.
*
* @return array
* An associative array keyed by unique name of the widget. Each widget is an
* associative array keyed by "handler" containing:
* - label: The human readable name of the plugin displayed in the admin UI.
* - class: The name of the plugin class.
* - query types: An array of query-types that this widget is compatible with.
* - requirements: An array of requirements that must pass in order for this
* widget to be displayed. Requirements are associative arrays keyed by
* function to requirement options. The value defaults to a requirement that
* the "element type" realm property is equal to "links".
*
* @see FacetapiWidget
* @see facetapi_get_widgets()
*/
function hook_facetapi_widgets() {
return array(
'facetapi_links' => array(
'handler' => array(
'label' => t('Links'),
'class' => 'FacetapiWidgetLinks',
'query types' => array('term', 'date'),
'requirements' => array(
'facetapi_requirement_realm_property' => array('element type' => 'links')
),
),
),
);
}
/**
* Forces delta mapping of a facet block.
*
* This obscure hook is useful for cases where facets are disabled, but their
* block positioning needs to be set anyways. If a facet is enabled via the
* facetapi_set_facet_enabled() API function, its block needs to be enabled
* and assigned to a region despite the facet not being enabled in the Facet API
* interface, which would normally prevent the block from being listed.
*
* @return array
* An associative array keyed by searcher. Each sub array is an associative
* array keyed by realm name to facet names whose delta mappings are forced.
*/
function hook_facetapi_force_delta_mapping() {
return array(
// The machine-readable name of the searcher.
'my_searcher' => array(
// The realm we are mapping, usually block.
'block' => array(
// Machine readable names of facets whose mapping are being forced.
// Regardless of whether they are enabled via the Facet API interface,
// their blocks will be available to enable and position via
// admin/structure/block.
'facet_one',
'facet_two',
),
),
);
}
/**
* Alters the hash that is generated for block deltas.
*
* @param type &$hash
* The delta hash.
* @param type $delta
* The block's delta.
*
* @see https://www.drupal.org/node/1828396
*/
function hook_facetapi_hash_alter(&$hash, $delta) {
$hash = drupal_html_class($hash);
}
/**
* Implemented by the translator module to translate a string.
*
* This hook is invoked by the facetapi_translate_string() function. The
* "facetapi:translator_module" variable stores which translator module is
* active since it wouldn't make sense to have multiple translator modules.
*
* @param $name
* The name of the string in "textgroup:object_type:object_key:property_name"
* format.
* @param $string
* The string being translated.
* @param $langcode
* The language code to translate to a language other than what is used to
* display the page. Defaults to NULL, which uses the current language.
*
* @return
* The translated string.
*
* @see facetapi_translate_string()
*/
function hook_facetapi_translate_string($name, $string, $langcode = NULL) {
// In this instance, the translator module integrates with the i18n project.
return i18n_string($name, $string, array('langcode' => $langcode));
}
/**
* @} End of "addtogroup hooks".
*/