Динамическое программное добавление exposed фильтра при расположении фильтров в блоке

Главные вкладки

Аватар пользователя NIKS_ArtReaktor NIKS_ArtReaktor 27 декабря 2011 в 18:11

Прошу помочь в таком вопросе.

Использую модули 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);
  
         }
         }
?>

Заранее спасибо.

Комментарии

Аватар пользователя NIKS_ArtReaktor NIKS_ArtReaktor 29 декабря 2011 в 12:03

Выкрутился таким образом
с помощью jQuery переношу HTML форму exposed filters в блок.

Прописываю этот код в блок (его ID #block-block-4) , куда хочу перенести форму exposed filters views од названием например testView ( css class .view-display-id-catalog_1 .view-filters)

<script type="text/javascript">

$(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 кода не видно.

Аватар пользователя Fox Mulder Fox Mulder 27 февраля 2012 в 6:15

Спасибо за классное решение!
Единственное, добавил еще css

.view-filters {
display:none;
}

чтобы блок не появлялся сначала в ненужном месте (у меня все-таки заметна перерисовка)