Как поменять значение views raw data array

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

Аватар пользователя makkon makkon 4 февраля 2014 в 11:19

Доброго дня. Имею некий 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']
показывает что нужно.
А вот как их заставить сохраниться с перезаписью?

Комментарии

Аватар пользователя makkon makkon 4 февраля 2014 в 14:07

пока что пробовал через hook_form_alter(&$form, &$form_state, $form_id)
но начинает тормозить ужасно вьюха. и через раз как-то обновляет эти параметры (делал как выше) - по ф5 не обновляет первый раз, второй норм.
а если дебагать массив $form, то там вобще переменных таких нету, которые за нужный мне минимум и максимум отвечают

Аватар пользователя q2_faith q2_faith 4 февраля 2014 в 14:18

"makkon" wrote:
пока что пробовал через hook_form_alter(&$form, &$form_state, $form_id)

через этот хук будет тормозить, так как дергаются все формы на странице.

Аватар пользователя makkon makkon 4 февраля 2014 в 14:41

"q2_faith" wrote:
через этот хук будет тормозить, так как дергаются все формы на странице.

так не суть, что через этот, что через тот хук обновляется только на второй раз. тоесть когда перехожу на другую страницу вьюхи - отображается актуальная инфа для предыдущей
что квери
$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...

Аватар пользователя makkon makkon 4 февраля 2014 в 15:08
<?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 переменные

Аватар пользователя makkon makkon 4 февраля 2014 в 16:21

задача - прикрутить слайдер на сайт, но методом BEF (есть способ как сдлать это другими способами, но хочется именно так)
сделать запрос к базе и вывести в переменные минимальную и максимальную цену (это уже умею делать) и передать эти значения ['bef_slider_min'] и ['bef_slider_max'] во вьюхе

имею
views 3 (там где товары отображаются, сижу на термине таксономии в качестве аргумента) + better exposed filters последняя бета (там где slider прикрутили) и фильтр, который не в блоке. у него тип - bef и виджет jquery slider. но минимальное и максимальное значение у него - required поле, в которое нужно полюбому что-то ввести.

в идеале без перемещения фильтра в блок.

вот и не понятно как переписать эти самые параметры bef, чтобы подставлять в них свои динамические значения

Аватар пользователя makkon makkon 4 февраля 2014 в 17:17

так hook_form_alter(&$form, &$form_state, $form_id) и вызывается последним. НО вся фишка в том, что объект $form не содержит никаких настроек better exposed filters Sad все версии самые последние.
вот, а если вьюху запрашивать - то не ясно как ее сохранить, чтобы срабатывало самым последним.
при этом альтеры для вьюх я тоже пробовал уже

Аватар пользователя makkon makkon 4 февраля 2014 в 22:02
<?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 кастомное значение?

Аватар пользователя q2_faith q2_faith 5 февраля 2014 в 13:40

"makkon" wrote:
как присвоить bef_slider_min кастомное значение?

как я понял, это поле обязательное и вы хотите, туда подставлять значения, чтобы пользователь не напрягался?

Аватар пользователя makkon makkon 5 февраля 2014 в 21:02

не совсем. там есть дефолт, но я хочу этот дефолт переопределять
но в целом да, ради пользователя Smile а в частности - чтобы работал слайдер

Аватар пользователя q2_faith q2_faith 6 февраля 2014 в 13:26

"makkon" wrote:
не совсем. там есть дефолт, но я хочу этот дефолт переопределять

тогда вам надо использовать хук, который я вам уже дважды советовал. Единственно с чем могут быть проблемы, так это то, что там дофига JS навешано.

Аватар пользователя makkon makkon 7 февраля 2014 в 7:48

вобщем сделал свой кастомный. в топку эти bef. все работает.
просто принципиально хотелось понять как все-таки переопределить массив

Аватар пользователя q2_faith q2_faith 7 февраля 2014 в 13:07

"makkon" wrote:
вобщем сделал свой кастомный. в топку эти bef. все работает.
просто принципиально хотелось понять как все-таки переопределить массив

принципиально так, как я советовал. просто в вашем случае это осложнялось тем, что поверх вьюшных фильтров накладывались от беф, и еще сверху js

Аватар пользователя makkon makkon 12 февраля 2014 в 17:31

у них нема хука для переопределения значений фильтра. видимо обрабатываются самыми последними и перекрывают то, что я присваивал.