Доброго дня. Имею некий views с better exposed filter.
Хочу передать в его параметры мои динамические значения.
Вот такой php код вставил в заголовок views.
<?php
$max=100;
$min=2;
//degub($view);
$view = views_get_view('product_catalog_list', TRUE);
$view->display['default']->display_options['exposed_form']['options']['bef']['commerce_price_amount']['slider_options']['bef_slider_max']=$max;
$view->display['default']->display_options['exposed_form']['options']['bef']['commerce_price_amount']['slider_options']['bef_slider_min']=$min;
views_save_view($view);
?>
не сохраняет вьюху. Ну тобишь значения по умолчанию у BEF остаются те же.
echo $view->display['default']->display_options['exposed_form']['options']['bef']['commerce_price_amount']['slider_options']
показывает что нужно.
А вот как их заставить сохраниться с перезаписью?
Комментарии
по моему вам надо попробовать сделать через https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...
пока что пробовал через hook_form_alter(&$form, &$form_state, $form_id)
но начинает тормозить ужасно вьюха. и через раз как-то обновляет эти параметры (делал как выше) - по ф5 не обновляет первый раз, второй норм.
а если дебагать массив $form, то там вобще переменных таких нету, которые за нужный мне минимум и максимум отвечают
через этот хук будет тормозить, так как дергаются все формы на странице.
так не суть, что через этот, что через тот хук обновляется только на второй раз. тоесть когда перехожу на другую страницу вьюхи - отображается актуальная инфа для предыдущей
что квери
$max = db_query("SELECT MAX(`commerce_price_amount`) FROM {`field_data_commerce_price`} WHERE {`field_data_commerce_price`.`entity_id`} IN (SELECT {`field_product_product_id`} FROM {`field_data_field_product`}
where {`field_data_field_product`.`entity_id`} IN (SELECT {`entity_id`} FROM {`field_data_field_product_display_catalog`} AS catalog WHERE {`catalog`.`field_product_display_catalog_tid`} =:cnid))", array(':cnid' => $catalog))->fetchField();
$max=Ceil($max/100);
что обычные рандомные числа.
вот эти товарищи вобще в темплейте не хотят заводиться на вьюху. http://drupalcontrib.org/api/drupal/contributions!views!views.api.php/gr...
<?phpfunction hook_views_pre_render(&$view) {
drupal_set_message("Form ID is : " . $view->name);
if ($view->name=='product_catalog_list') {
foreach($view->result as $row) {
debug($row);
}
}
}?>
кстати тоже не выводит bef переменные
так давайте начнем сначала. какая стоит задача?)
задача - прикрутить слайдер на сайт, но методом BEF (есть способ как сдлать это другими способами, но хочется именно так)
сделать запрос к базе и вывести в переменные минимальную и максимальную цену (это уже умею делать) и передать эти значения ['bef_slider_min'] и ['bef_slider_max'] во вьюхе
имею
views 3 (там где товары отображаются, сижу на термине таксономии в качестве аргумента) + better exposed filters последняя бета (там где slider прикрутили) и фильтр, который не в блоке. у него тип - bef и виджет jquery slider. но минимальное и максимальное значение у него - required поле, в которое нужно полюбому что-то ввести.
в идеале без перемещения фильтра в блок.
вот и не понятно как переписать эти самые параметры bef, чтобы подставлять в них свои динамические значения
так hook_form_alter(&$form, &$form_state, $form_id) и вызывается последним. НО вся фишка в том, что объект $form не содержит никаких настроек better exposed filters все версии самые последние.
вот, а если вьюху запрашивать - то не ясно как ее сохранить, чтобы срабатывало самым последним.
при этом альтеры для вьюх я тоже пробовал уже
<?phpfunction mymodule_form_views_exposed_form_alter(&$form, &$form_state) {
debug($form_state['exposed_form_plugin']->options['bef']['commerce_price_amount']['slider_options']['bef_slider_min']);
}?>
вот нашел эту штуку в $form_state.
как присвоить bef_slider_min кастомное значение?
как я понял, это поле обязательное и вы хотите, туда подставлять значения, чтобы пользователь не напрягался?
не совсем. там есть дефолт, но я хочу этот дефолт переопределять
но в целом да, ради пользователя а в частности - чтобы работал слайдер
тогда вам надо использовать хук, который я вам уже дважды советовал. Единственно с чем могут быть проблемы, так это то, что там дофига JS навешано.
вобщем сделал свой кастомный. в топку эти bef. все работает.
просто принципиально хотелось понять как все-таки переопределить массив
принципиально так, как я советовал. просто в вашем случае это осложнялось тем, что поверх вьюшных фильтров накладывались от беф, и еще сверху js
у них нема хука для переопределения значений фильтра. видимо обрабатываются самыми последними и перекрывают то, что я присваивал.