Прошу помочь в таком вопросе.
Использую модули Better exposed fitlers, Views hacks - views_filters_selective
С помощью модуля динамически создаю exposed filter.
по полю с разрешенными значениями, и использую вывод чекбоксами(фильр BEF), с ограничением вариантов выбора (фильтр views hacks).
использую функцию hook_views_pre_view
Все выводит и создается отлично. Но когда я вывожу фильтры в блок (exposed form in block: ДА), то фильтр который создается программно, как будто не воспринимает настройки и обработку результатов модулями Better exposed fitlers, Views hacks - views_filters_selective
Он выводится, но результаты не обработаны, то есть нет ограничения и нет чекбоксов.
Если отключить exposed form in block: ДА - то все окей.
Я интуитивно понимаю, что это связано с "указанием временем" добавления фильтра. В данном случае с hook_views_pre_view. Но пока не знаю, какой другой можно применить хук, чтобы фильтр воспринял выборку значений.
Вот функция которая в модуле.
<?php
function expfilmod_views_pre_view(&$view) {
if($view->name == "prodvgetexpfil")
{
$display_id = 'catalog_1';
$view->set_display($display_id);
$id = $view->add_item($display_id, 'filter','node_data_field_tilt', 'field_tilt_value_many_to_one');
$item = $view->get_item($display_id, 'filter', $id);
$item['operator'] = 'or';
$item['value'] = array();
$item['group'] = '0';
$item['exposed'] = TRUE;
$item['expose'] = array(
'use_operator' => 0,
'operator' => 'field_tilt_value_many_to_one_op',
'identifier' => 'field_tilt_value_many_to_one',
'label' => '(field_tilt) - Allowed values',
'bef_filter_description' => '',
'bef_format' => 'bef',
'optional' => 1,
'single' => 0,
'remember' => 0,
'reduce' => 0,
'vfs_selective' => 1,
'vfs_active' => 0,
'vfs_field' => '0',
'vfs_hide_empty' => 0,
'vfs_optional' => 0,
'bef_select_all_none' => 1,
'bef_collapsible' => 0,
);
$item['id'] = 'field_tilt_value_many_to_one';
$item['table'] = 'node_data_field_tilt';
$item['field'] = 'field_tilt_value_many_to_one';
$item['override'] = array('button' => 'Use default');
$item['relationship'] = 'none';
$item['reduce_duplicates'] = 0;
$view->set_item($display_id, 'filter', $id, $item);
}
}
?>
Заранее спасибо.
Комментарии
Выкрутился таким образом
с помощью jQuery переношу HTML форму exposed filters в блок.
Прописываю этот код в блок (его ID #block-block-4) , куда хочу перенести форму exposed filters views од названием например testView ( css class .view-display-id-catalog_1 .view-filters)
$(document).ready(function(){
var get = $(".view-display-id-catalog_1 .view-filters").html();
$("#block-block-4").html(get);
$(".view-display-id-testView .view-filters").remove();
})
</script>
В результате форма просто оказывается в блоке который нужен и даже jquery кода не видно.
Спасибо за классное решение!
Единственное, добавил еще css
display:none;
}
чтобы блок не появлялся сначала в ненужном месте (у меня все-таки заметна перерисовка)