Drupal 7 - подавить вывод узлов на страницах таксономии

10

Есть ли способ подавить вывод узлов на страницах таксономии, не устанавливая модуль (т.е. просто в template.php)?

Узлы, помеченные термином таксономии, отображаются на «странице индекса таксономии» (например, yoursite.com/taxonomy/term/[id]).

Новое в Drupal 7, страницы таксономического индекса могут иметь прикрепленные к ним поля. Однако если вы попытаетесь перевернуть страницу таксономии с помощью представления (например, для управления отображением узлов), поля на страницах индекса таксономии не появятся.

Поэтому я разместил свое представление таксономии как блок на странице индекса таксономии. Таким образом, я могу контролировать, как появляются узлы и все еще имеют поля страницы индекса таксономии.

Из-за этого страница таксономии все еще выводит свои узлы. Я могу скрыть их, установив тизер узлов скрытым, но он по-прежнему загружает узлы (и, следовательно, любой CSS / Jquery, присоединенный к узлам, даже если узлы не отображаются). Как я могу подавить появление узлов, в идеале из template.php?

большая улыбка
источник
Почему вы не хотите устанавливать модуль? Некоторые вещи легче достичь с помощью модулей.
Мартин Шлагнитвейт

Ответы:

5

Я знаю, что нужно решение без модуля, но в Drupal 7 есть модуль, который делает именно то, что вам нужно: отключить списки узлов термина

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

Мартин Шлагнитвейт
источник
См. Также: drupal.stackexchange.com/questions/3165/…
Бендж,
8

Решение от http://www.wardontheweb.com/remove-node-lists-from-taxonomy-pages-in-drupal-7/ работает для меня хорошо:

function THEMENAME_preprocess_page(&$vars){
   if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))){
     unset($vars['page']['content']['system_main']['nodes']);
     unset($vars['page']['content']['system_main']['pager']);
     unset($vars['page']['content']['system_main']['no_content']);
   }
}

Примечание: вы должны сбросить кеш вашего сайта.

Петр Лозовицкий
источник
ПРИМЕЧАНИЕ: это отключит список узлов для любых страниц терминов таксономии на сайте.
Дунканмоо
@Peter Lozovitskiy Я делаю это и сталкиваюсь с ошибкой «Внимание: использование неопределенной постоянной таксономии»!
shekoufeh
@shekoufeh, я исправил код (заменил запятые), попробуйте этот код сейчас.
Петр Лозовицкий
2

Вы должны удалить узлы из переменной $ page.

В template.php вы можете сделать это так:

function MY_THEME_preprocess_page(&$variables) {
  if(arg(0) == "taxonomy" && arg(1) == "term") {
    $variables['page']['content']['system_main']['nodes'] = null;
  }
}

В вашем page.tpl.php используйте этот код:

if(arg(0) == "taxonomy" && arg(1) == "term"){
  $page['content']['system_main']['nodes'] = null;
}

Это удаляет узлы из всех словарей и терминов . Если вы хотите удалить их только из определенных терминов или из всех терминов из словаря, используйте arg(2)его, tidчтобы загрузить термин, а затем обновите оператор if.

Мартин Шлагнитвейт
источник
Это работает, но все еще оставляет пейджер включенным. Это означает, что узлы загружаются и тратят ресурсы сервера. В любом случае, спасибо за совет, я уже использую ваш метод :) Но теоретически лучший метод все еще существует.
int_ua
0

Вы можете делать практически все что угодно в template.php, но это не рекомендуется. Смысл использования CMS заключается в том, что вы разделяете данные, поведение и внешний вид. Файл template.php является частью тематического слоя, и вы должны использовать его для настройки визуального стиля вашего сайта.

Если вы хотите настроить поведение сайта (в данном случае: контролировать, какие элементы отображаются в определенном списке), вам нужно изменить поведение, поэтому вы устанавливаете и настраиваете модули. Если вы хотите создавать собственные списки содержимого, модуль Views - это именно то, что вам нужно.

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

marcvangend
источник
Спасибо за ответ! Я уже использую представления, чтобы переопределить страницу таксономии. Тем не менее, я использую View Override как блок вместо страницы, так как мне нужно, чтобы поля на странице таксономии оставались видимыми. Единственная проблема состоит в том, что страница таксономии все еще загружает узлы, что кажется ненужным.
big_smile
Я не понимаю, что вы имеете в виду под "полями на странице таксономии", но скрывать содержимое страницы и заменять его блоком не похоже на правильное решение. Если вы просто переопределяете страницу таксономии обычным просмотром страницы, какие именно функции вам не хватает? (Возможно, вы сможете обновить свой оригинальный вопрос, и я соответствующим образом
улучшу
Ответ также обновлен.
Marcvangend
К сожалению, ваш ответ не работает. Если вы попытаетесь привести поля таксономии в представление, оно будет отображать содержимое каждого отдельного поля (а не тех, которые просто принадлежат определенной просматриваемой странице).
big_smile
0

Я использовал CSS, чтобы скрыть элементы таксономии, но установил их отображение на заказ и отключил их, что кажется лучшим вариантом.

Джозеф Коко
источник