drupal множественное представление аргументов с проверкой кода PHP на пустые аргументы - PullRequest
1 голос
/ 10 сентября 2010

У меня есть представление, настроенное на прием 2 аргументов.URL-адрес выглядит следующим образом: playlists / video5 /% /% / rss.xml. Он работает нормально, если я добавляю URL-адрес с двумя аргументами, такими как списки воспроизведения / video5 / front / coach / rss.xml.У меня есть 2 аргумента «Таксономия: Термин»

Но мне нужно, чтобы он запускался, даже если указан 1 или нет аргументов.Похоже, вы можете сделать это с помощью PHP-кода в: Предоставить параметры аргумента по умолчанию -> Тип аргумента по умолчанию: -> Код PHP.

Я использую это для первого:

$arg[0] == 'all';
return 'all';

Я использую это для второго:

$arg[1] == 'all';
return 'all';

Это нормально работает в превью , если я ввожу 1, 2 или нет аргументов, но в браузере это дает мнеошибка «Страница не найдена», если в URL-адресе используется менее 2 аргументов.

Он работает с такими URL-адресами: /playlists/video5/gridiron/all/rss.xml / playlists/video5/gridiron/football/rss.xml

Не работает с этим: плейлисты / video5 / gridiron / rss.xml

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

спасибо

Ответы [ 2 ]

3 голосов
/ 10 сентября 2010

Я бы перестроил ваш URL так: playlists/video5/rss/%/%, чтобы ваши аргументы всегда были последними. Тогда в настройках вашего аргумента установите:

Действие, которое необходимо предпринять, если аргумент отсутствует: Показать все значения

Таким образом, когда вы перейдете к playlists/video5/rss, вы получите все значения. Когда вы перейдете на /playlists/video5/rss/term1, вы получите все значения, в которых есть term1. Тогда хитрость для второго аргумента состоит в том, чтобы включить подстановочный знак для первого аргумента, например так: /playlists/video5/rss/all/term2. Я считаю, что это будет включать в себя только те значения, которые имеют второе слагаемое.

В качестве альтернативы, если оба эти термина таксономии, вы можете объединить их в один аргумент и установить флажок: Allow multiple terms per argument. В соответствии с документацией прямо под флажком, похоже, что это должно позволить playlists/video5/rss/term1+term2 и отображать все значения, имеющие первый или второй член.

1 голос
/ 10 сентября 2010

Представления будут разрушать только %, а не косые черты вокруг него.Поэтому, пока вы пытаетесь использовать playlists/video5/rss.xml, Views ожидает playlists/video5///rss.xml.

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

Для первого дубликата используйте playlists/video5/%/rss.xml в качестве пути.В своих аргументах для этого отображения представления убедитесь, что первый аргумент проверяется либо на gridiron, либо на football.

Для второго дубликата используйте playlists/video5/rss.xml.Для этого представления не будет аргументов.Если вы просто хотите, чтобы все записи отображались, вам не нужно больше ничего делать.Но если вы хотите предоставить аргумент по умолчанию, отличный от всех записей, вы должны переопределить отображение представления и создать вместо аргумента фильтр.


Другой (менее идеальный) вариант - обработать gridiron/football в качестве одного аргумента и проверить его таким образом.

...