Views. Аргумент контекстного фильтра по значению поля.

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

Аватар пользователя Luur Luur 16 марта 2017 в 16:43

Собственно, вопрос:
Как передать в контекстный фильтр значение поля текущей ноды (ноды на странице которой выводится блок views). (аргумент который мне нужен не содержится в урле)

копал в сторону:
PHP contextual filter code с значением


<?php
return $content->field_name[0];
?>

field_name - текстовое поле

Лучший ответ

Аватар пользователя dayaoleg dayaoleg 17 марта 2017 в 0:37

Не знаю насколько это правильное решение, наверняка есть правильнее, но можно так:
Контекстный фильтр по этому полю.
Значение по умолчанию, тип php.

<?php
$node 
node_load(arg(1));
if (isset(
$node->field_name['und'][0]['value'])) return $node->field_name['und'][0]['value'];
?>

Комментарии

Аватар пользователя bumble bumble 16 марта 2017 в 18:43
1

В "урле" содержится нода, а поле в ней. Т.е. для передачи значения из блока - ему (блоку) достаточно отображаться на странице материала, значение подхватится автоматически (если контекстный фильтр правильно настроен).

Аватар пользователя dayaoleg dayaoleg 17 марта 2017 в 0:37

Не знаю насколько это правильное решение, наверняка есть правильнее, но можно так:
Контекстный фильтр по этому полю.
Значение по умолчанию, тип php.

<?php
$node 
node_load(arg(1));
if (isset(
$node->field_name['und'][0]['value'])) return $node->field_name['und'][0]['value'];
?>
Аватар пользователя dayaoleg dayaoleg 21 марта 2017 в 19:55

Не сработало только если у тебя не field_name['und'][0]['value'] а например field_name['und'][0]['tid'] или что другое. Зависит от того что за поле. Посмотреть можно через модуль Devil.
И вводится это в раздел "Когда значение фильтра НЕ доступно".

Аватар пользователя Luur Luur 22 марта 2017 в 15:15

Большое спасибо!
конечный код был таким:

<?php
$node 
node_load(arg(1));
if (isset(
$node->field_name['und'][0]['taxonomy_term']->name)) return $node->field_name['und'][0]['taxonomy_term']->name;
?>
Аватар пользователя Sennheiser Sennheiser 28 марта 2018 в 20:38

А как сделать если нужно отфильтровать по нескольким полям. Почему-то выводит пустой список. По одному всё ок.

Аватар пользователя sas@drupal.org sas@drupal.org 29 марта 2018 в 7:46

там же написано
Enter PHP code that returns TRUE or FALSE. No return is the same as FALSE, so be SURE to return something if you do not want to declare the argument invalid. Do not use <?php ?>. The argument to validate will be "$argument" and the view will be "$view". You may change the argument by setting "$handler->argument". You may change the title used for substitutions for this argument by setting "$handler->validated_title".

$handler->argument = ...
return TRUE;