Как сделать арифметику на контекстном фильтре


9

Вместо того, чтобы указывать контекстный фильтр, возможно ли указать контекстный фильтр +1 (т.е. добавить один к текущему значению фильтра?)

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

Т.е. в view1 / arg1 я могу иметь глобальное текстовое поле, которое выводится как ссылка на view2 / arg1

Можно ли создать глобальное текстовое поле, которое выводится в виде ссылки на view2 / arg1 + 1

т.е. добавляет один к текущему аргументу?

Ответы:


1

В Views для D7 (не уверен насчет D6) вы можете добавить поле типа «математическое выражение», чтобы делать подобные вещи. Введите выражение [!1]+1(или, возможно, [%1]+1) в поле выражения Math, и затем более поздние текстовые поля могут ссылаться на это значение (в своих разделах перезаписи) как [expression].


0

Представления PHP, как правило, являются моим ответом, но кажется, что он пока не поддерживает PHP в контекстных фильтрах ...

Итак, вам нужно создать модуль, а затем:

  • Реализуйте, hook_views_api()чтобы сообщить Views, что ваш модуль хочет использовать свой API - см .: Как использовать hook_views_query_alter ()?
  • Реализовать hook_views_query_alter()затем сделать что-то вроде этого:

    function YOURMODULE_views_query_alter(&$view, &$query) {
      if ($view->name == 'YOUR_VIEW_NAME') {
         $query->where[0]['conditions'][0] += $value; // change this line accordingly
      }
    }

Я предполагаю, что ваш первый аргумент - это тот, который вы хотите изменить, и у меня нет представления, с которым я могу протестировать прямо сейчас, поэтому вам нужно print_r($ query-> where [0]); `чтобы увидеть, что происходит там и добавить к правильному значению.


0

Сделай что-нибудь подобное.

<?php
  $view = views_get_current_view();
  $arg = $view -> args[0];
  $newarg = intval($arg) + 1;
?>
<a href="https://drupal.stackexchange.com/view2/<?php print($newarg); ?>">Increment my contextual filter</a>

0

Вы можете создать шаблон представлений для ваших представлений и сделать что-то подобное ниже.

<?php $arg = arg(1);  ?>
<a href="<?php print base_path() . 'view2/' . ($arg + 1) ;?>">Link to view</a>  
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.