Люди помогите пожалуйста,
Я в тупике, а все наверника просто..
example.com/test_page/200
Настроил page url: test_page
В argument handling code надо что-то написать, чтобы параметр 200 изменял свойства фильтра..
Как этого добиться? целый вечер мучаюсь.
пробовал сделать Export View и там где массив с фильтрами, ставил нужный кусочек в argument handling code, но тогда мне пишут что ошибка в SQL запросе.
Комментарии
кто-нибудь... отзовитесь
оооооочень нужна помощьб страшно горю!
не нужно фильтры менять динамически, пользуйтесь аргументами, при надобности сделайте несколько видов
а вообще - аргумент это и есть изменяемый фильтр - приходит при вызове вида переменная - и по ней уже вид делает фильтр, но сам фильтр менять динамически сложно, да и не нужно.
А каким образом сделать, чтобы можно было ноды отфильтровать по значению CCK поля price в пределах от 100 до 150 например?
как это настроить?
ну в вашем случае подойдет такое немного халтурное решение - http://drupal.ru/node/5960 - через viewsphpfilter, но это конечно халтура, хотя и будет работать, мне вот тоже интересно, а то получается такое простое действие - а решения нет.
Маленькими шажочками пришел к:
drupal_set_message(arg(1));
$view->sort[0]['vid'] = 7;
$view->sort[0]['position'] = 0;
$view->sort[0]['field'] = 'node_data_field_price.field_price_value';
$view->sort[0]['sortorder'] = 'ASC';
$view->sort[0]['options'] = '';
$view->sort[0]['tablename'] = '';
$view->sort[0]['id'] = 'node_data_field_price.field_price_value';
}
$view->is_cacheable = 0;
return $args;
Т.е. этот код делает сортировку...а вот с фильтрами никак
этот код почему-то не работает
drupal_set_message(arg(1));
$view->filter[0]['vid'] = 7;
$view->filter[0]['tablename'] = '';
$view->filter[0]['field'] = 'node_data_field_price.field_price_value';
$view->filter[0]['value'] = '105';
$view->filter[0]['operator'] = '>';
$view->filter[0]['options'] = '';
$view->filter[0]['position'] = 0;
$view->filter[0]['id'] = 'node_data_field_price.field_price_value';
}
$view->is_cacheable = 0;
return $args;
Ноды можно отфильтровывать, например, так:
1. Создать два фильтра для одного и того же поля:
field_price - Is Greater Than Or Equals - 0
field_price - Is Less Than Or Equals - 1000 000 000
2. Посмотреть индекс этих новосозданных фильтров в $view->filter. Для этого можно временно в Argument Handling Code разместить следующий скрипт:
print '<pre>';
print_r($view);
print '</pre>';
$view->page_footer .= ob_get_contents();
ob_end_clean(); // End buffering and discard
return $args;
Предположим, эти индексы 3 и 4 соответственно.
3. В Argument Handling Code написать:
$view->filter[4]['value'] = $args[1];
$view->is_cacheable = 0;
return $args;
Это работает если view отображается как страница.
Не уверен, однако, что это самое элегантное решение. Возможно, было бы лучше задать фильтры и разрешить их изменение пользователем (exposed), однако у меня сея фича с двумя фильтрами для одного поля работала как-то неадекватно.
***
Код с фильтрами у Вас может не работать, если Вы позаимствовали значения переменных из чужого кода. В Вашем конкретном случае они могут отличаться. Загляните в переменную $view (см. п. 2) и сравните все ли сходится.
Надеюсь, что я по теме...
СПАСИБО!!!!!!!!! Огромное спасибо! У меня нет слов! Я воевал с этим трое суток!
Разрешите от Вашего имени на друпал.орг написать? там много людей, которые пытаются сделать тоже самое но не могут.
Это должно попасть в handbook
Ну, слава богу, кто-то ответил!! А то я уже стал сомневаться в собственном существовании... : )
Рад, что решение оказалось полезным. С информацией можете поступать как пожелаете (моей заслуги тут, собственно, свежий, незамыленный взгляд со стороны на проблему).
какая элементарная задача, а столько сложностей, напишите конечно на друпал-орг про это безобразие что задокументированная функция не работает! пусть исправят.
Ок, в ближайшие дни напишу статейку в handbook с описанием и рншение проблемы.
Ещё раз спасибо
там уже было что-то на эту тему.
http://drupal.org/node/70145#comment-204051
так в том-то и дело что то не работает