Как отфильтровать представление блока по аргументу таксономии в URL? - PullRequest
1 голос
/ 03 ноября 2010

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

Когда я загружаю узел напрямую, у меня появляется URL-адрес, например www.host.com/events/new-york/name-of-my-nice-event

. У меня есть несколько других просмотров страниц, которые показывают тизеры для всех событий в определенном городе.: www.host.com/events/new-york

Также у меня есть несколько статических страниц, которые действительны для всех городов, например, www.host.com/about-us

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

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

if (arg(1)) {
    $term = arg(1);
    return $term;
}

Это прекрасно работает на вышеупомянутых просмотрах страниц (например, www.host.com/events/new-york).Но когда я загружаю узел напрямую www.host.com/events/new-york/name-of-my-nice-event, мой блок показывает только пустой текст.

Я думал, что аргументы индексируются так:

           events/new-york/name-of-my-nice-event
           ^0     ^1       ^2

Так что я не понимаю, почему аргумент(1) не возвращает new-york при просмотре сведений об узле.

Ответы [ 3 ]

0 голосов
/ 03 ноября 2010

Решение моей проблемы:

if (arg(0) == 'node' && is_numeric(arg(1))) {
    $node = node_load(arg(1));

    if (count($node->taxonomy) > 0)  {
      foreach ($node->taxonomy as $term) {
        $term = $term->name;
      }
    }

    $term = strtolower($term); // for some reason needed in my case
}

else {
    $term = arg(1);
    $term = str_replace('-', ' ', $term); // for some reason needed in my case
}

return $term;
0 голосов
/ 04 ноября 2010

Хотя это было технически возможно с представлениями 2, как описано в некоторых других ответах, представления 3 имеют встроенную интеграцию.

Вы можете создать аргумент для идентификатора термина таксономии и затем выбрать «Предоставить аргумент по умолчанию» . Это даст вам возможность для «ИД таксономического термина из URL» и «Загрузить аргумент по умолчанию со страницы узла ...»

Это позволит вам взять таксономию страницы и передать ее в качестве аргумента в ваш блок просмотра.

Примечание: Views 3 в настоящее время находится в Alpha 3, но, по моему опыту, находится в относительно стабильном состоянии, и я использую его на рабочих сайтах. Если он имеет функции, подобные приведенной выше, которые вы считаете полезными, используйте его, протестируйте и отправляйте сообщения об ошибках / исправления, если у вас возникнут какие-либо проблемы!

0 голосов
/ 03 ноября 2010

Прежде всего, при использовании автоматического пути и пути, то, что вы видите, не всегда то, что вы получаете.

Fx Я мог бы установить pathauto для своих узлов статей для генерации URL-адресов, подобных этому

content/article/[title]

Так что, если бы я хотел название, я должен использовать arg(2) верно?

Нет! (arg(2) на самом деле NULL в данном случае.)

Причина в том, что URL, сгенерированный path auto, является фальшивым URL, который переводится в URL Drupal.В приведенном выше случае я получаю node/[nid].Таким образом, несмотря на то, что название узла i в URL, я не могу получить его с помощью arg(), но я могу получить nid с помощью arg(1)

Я не могу угадать, что ваша карта URL-адресовзависит от того, как вы настроили свой сайт, какие модули вы используете и т. д.

Хороший совет, если вы делаете много этих контекстно-зависимых вещей, это загляните в панелей .Это сделано для того, чтобы иметь возможность сообщать модулям, например представлениям, контекст, в котором он присутствует.Как и термины FX, узлы и т. Д., И вы можете использовать это для передачи аргументов в представления.

Панели могут сделать намного больше и довольно сложны, но если вам нужно сделать много всего этого, этовероятно, стоит инвестиций.

...