Як робити арифметику на контекстному фільтрі


9

Замість того, щоб вказати контекстний фільтр, чи можна вказати контекстний фільтр +1 (тобто додати його до поточного значення фільтра?)

Якщо у вас є перегляд аргументу, я розумію, що ви можете створити глобальне текстове поле, щоб зробити посилання на інший вигляд, використовуючи оригінальний аргумент.

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

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

тобто додає його до поточного аргументу?

Відповіді:


1

У Поглядах для D7 (не впевнений у D6) ви можете додати поле типу "Вираз математики", щоб зробити цю справу. Введіть вираз [!1]+1(або, можливо, [%1]+1) у поле вираження Математика, а потім пізніші текстові поля можуть посилатися на це значення (у розділах Переписати) як [expression].


0

Перегляди PHP зазвичай є моєю відповіддю, але, схоже, він ще не підтримує PHP в контекстних фільтрах ...

Тож вам потрібно буде створити собі модуль, а потім:

  • Реалізація, hook_views_api()щоб повідомити Перегляди, ваш модуль хоче використовувати свій API - див .
  • Реалізувати 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.