Нужна была сортировка по весу указаному в поле(тип list) я сделал, выглядит это так:
<?php/**
* Implements hook_facetapi_sort_info().
*/
function helper_facetapi_sort_info() {
$sorts = array();
$sorts['Field setting'] = array(
'label' => t('Output by options order'),
'callback' => 'helper_sort_field_settings',
'description' => t('Options order set in field setting'),
'weight' => -51,
);
return $sorts;
}
/**
* Sorts by taxonomy weight.
*/
function helper_sort_field_settings(array $a, array $b) {
$query_field = isset($a['#query']['f']) ? $a['#query']['f'] : $b['#query']['f'];
$last_item_number = count($query_field) - 1;
foreach ($query_field as $key => $item) {
$query_field[$key] = str_replace(':', '%3a', $query_field[$key]);
}
$field = substr($query_field[$last_item_number], 0, strpos($query_field[$last_item_number], '%3a'));
$my_field = field_info_field($field);
$allowed_values = (!empty(list_allowed_values($my_field))) ? list_allowed_values($my_field) : FALSE;
$sort_array = array();
$n = 0;
if ($allowed_values) {
foreach ($allowed_values as $index => $value) {
$sort_array[$n] = $value;
$n++;
}
$a_sort = array_search($a['#markup'], $sort_array);
$b_sort = array_search($b['#markup'], $sort_array);
if ($a_sort == $b_sort) {
return 0;
}
return ($a_sort < $b_sort) ? -1 : 1;
}
}?>
По логике она должна все идеально сортировать но сортирует она только при первой загрузке страницы, после выбора фильтров пункты в блоках прыгайт в хаотическом порядке. Может кто сталкивался? Спасибо!
Комментарии
Решыл проблему с помощю хака модуля:
index 3fa3ee0..bf27db2 100644
--- a/docroot/sites/all/modules/contrib/facetapi/plugins/facetapi/adapter.inc
+++ b/docroot/sites/all/modules/contrib/facetapi/plugins/facetapi/adapter.inc
@@ -1464,10 +1464,11 @@ class FacetapiFacetProcessor {
*/
protected function initializeBuild() {
$build = array();
-
+ $current_facet = $this->facet->getFacet();
// Build array defaults.
$defaults = array(
'#markup' => '',
+ '#current_field' => $current_facet['field api name'],
'#path' => $this->facet->getAdapter()->getSearchPath(),
'#html' => FALSE,
'#indexed_value' => '',