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

9

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

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

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

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

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

Аарон
источник

Ответы:

1

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

benjifisher
источник
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>  
Джаендра Каинтола
источник