Как работают контекстные фильтры Views?


9

Я пытаюсь снова обернуть голову вокруг контекстных фильтров! Я использовал это некоторое время назад, но я снова был полностью ошарашен. Вот что я пытаюсь сделать:

  1. Создайте страницу узла клонированного контента с терминами таксономии, вставленными в эту клонированную страницу.

Например: EXAMPLE.com/white-shoes/blue

Когда пользователь достигает страницы / white-shoes, он показывает исходную страницу узла, ориентированную на белый цвет. Теперь, если пользователь попадает в / white-shoes / blue, он покажет ту же страницу узла, но на этот раз все содержимое тела будет переписано с заменой белого цвета на синий.

В представлениях мне нужно создать отображение страницы с путем:% /%

Теперь я бы создал контекстный фильтр для получения nid. Я добавляю Content: nid в качестве контекстного фильтра. Я выбираю ПРЕДОСТАВИТЬ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ и вставляю этот код PHP:

$ x = drupal_lookup_path ('source', arg (0));

$ y = взорваться ('/', $ x);

вернуть $ y 1 ;

Этот PHP-код в основном преобразует часть URL / white-shoes в NID. Но это не работает. Я проверил код через drush ev через терминал, и я действительно получил возвращенный результат, так что я знаю, что он работает.

Я делаю то же самое для названия термина таксономии и добавляю контекстный фильтр для этого. На этот раз я выбираю ПРЕДОСТАВИТЬ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ, выбираю RAW VALUE FROM URL и выбираю второй аргумент.

введите описание изображения здесь

Как вы можете видеть, когда я ввожу ПРЕДВАРИТЕЛЬНОЕ ЗНАЧЕНИЕ для контекстного фильтра: AAA / BBB / CCC. Мое значение по умолчанию игнорируется. Предполагается, что он захватывает второй аргумент, но он получает только первый аргумент. Посмотрите на оператор SQL WHERE, и вы увидите, что он получает AAA, когда он должен быть BBB.

введите описание изображения здесь

Итак, вопрос в том, что я делаю неправильно или есть лучшее решение для того, чего я хочу достичь?


Это звучит глупо, но не могли бы вы предоставить немного больше деталей? У меня есть немного времени, чтобы понять, что вы пытаетесь, больше о том, как вы пытаетесь это сделать. Вместо использования необработанного значения или предоставления по умолчанию используйте идентификатор содержимого из URL-адреса. Это обеспечит NID.
kyletaylored

Привет, Кайл, нет идентификатора контента, так как ваша посадка на URL: / white-shoes / blue .... URL-адрес / blue не существует, так как он отображается представлениями. поэтому нет идентификатора содержимого для захвата ... он должен проанализировать 1-й аргумент URL-адреса, а затем преобразовать этот URL-адрес в путь NID.
Патоши シ ト シ

Ответы:


2

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

ВИДЕО: https://www.youtube.com/watch?v=lJFMTDuaxy8 (короткий URL-адрес видео YouTube: lJFMTDuaxy8)

СТАТЬЯ: http://www.metaltoad.com/blog/using-drupal-contextual-filters-views


5

Контекстный фильтр используется для фильтрации вывода представления по аргументам URL, также вы можете передать аргументы вручную в следующем формате:

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

где «$ name» - это имя вашего представления (например, «example_view»), а «$ display_id» - тип отображения вашего представления (например, «default»), а «$ arg1, $ arg2, $ arg3» - аргументы. так же, как в URL.

Аргументы URL имеют следующую структуру:

http://example.com/arg_1/arg_2/arg_3 (arg_2 имеет компонент пути 2 (на странице настроек просмотра)).

Когда значение фильтра недоступно:

это означает, что drupal не может найти фильтр.

Укажите значение по умолчанию:

когда значение фильтра недоступно, вы можете использовать эту опцию, чтобы создать фильтр для вывода представлений, этот фильтр может быть кодом PHP (если включен модуль фильтра PHP) или он может получить свое значение из аргументов URL -> (необработанное значение из URL). Текстовое поле Исключение позволяет вам обмануть значение и отобразить все результаты.

Когда значение фильтра доступно

в этом случае вы выполняете проверку в соответствии со своими потребностями и некоторые другие параметры, когда drupal может найти значение фильтра.


учитывая функцию views_embed_view (). как бы мне загрузить это в мой суб-путь / white-shoes / blue? имейте в виду, что / blue не существует, поскольку он генерируется представлениями. когда пользователь достигает пути / blue, он должен проанализировать 1-й аргумент и извлечь NID этого псевдонима, а затем загрузить его содержимое. проблема с контекстными фильтрами состоит в том, что нет способа предоставить значение PHP для КОГДА ДОСТУПНО ЗНАЧЕНИЕ ФИЛЬТРА.
Патоши シ ト シ

@duckx, есть отличная опция для предоставления значения PHP, когда фильтр доступен - VALIDATION (type: PHP Code). С помощью этой опции вы можете использовать вид объекта и делать все, что вам нужно. В вашем случае /blueпуть, сгенерированный представлениями, будет также использоваться для получения идентификатора узла этого псевдонима.
Джек-ЛП
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.