Вы здесь

Как с помощью препроцесса исключить вывод нод со страницы таксономии?

1

Привет!
Есть термины таксономии, которыми помечены ноды. Страницы терминов активно используются - это категории каталога (вывод товара списком), а ноды - товары. Вывод товаров хочется сделать вьюсом, а стандартный вывод списка нод исключить из вывода. Использовать вьюсовские суррогаты страниц таксономии не хочется: используются поля термина (описание, описание внизу товаров, и т.п.) и модуль Metatags, который с этими суррогатами вьюсовскими не работает.
Сейчас в шаблоне термина прописано вот так:

<?php //print render($content); ?>
<?php print render($content['description']); //описание категории ?>
<?php print views_embed_view('tovari', 'tovari_katalog1') ?>
<?php print render($content['field_tekst_2']); //описание категории внизу товаров ?>

но это я упростил, а вообще там логика есть, поэтому хочется сделать это с помощью функций препроцесса - создать там переменные, и в шаблоне вывести, чтобы всё кошерно было :) А как - не могу понять... Намекните кусочком кода, как с помощью функций препроцесса убрать со страницы термина таксономии стандартный вывод нод и задать пару переменных - полей этого термина?

Версия Drupal: 
7.x
Категория: 
Taxonomy APITheming
Вопрос задан 21.05.2015 - 23:37

Ответы

2
function hook_preprocess_taxonomy_term(&$vars) {
  debug($vars);
}
Ответ дан 22.05.2015 - 00:09
Аватар пользователя xandeadx
xandeadx
1542

Это я первым делом сделал, только я там не нашёл помеченные термином ноды. На том и затык в общем-то...

Комментарий оставлен 22.05.2015 - 00:29
function hook_page_alter(&$build) {
  if (arg(0) == 'taxonomy' && arg(1) == 'term') {
    debug($build['content']['system_main']['nodes']);
  }
}
Комментарий оставлен 22.05.2015 - 00:49

во, это то что нужно! сделал

  function mpgrey_page_alter(&$build) {
  if (arg(0) == 'taxonomy' && arg(1) == 'term') {
    unset($build['content']['system_main']['nodes']);
    unset($build['content']['system_main']['pager']);
  }
}
Комментарий оставлен 22.05.2015 - 02:06

а как бы теперь мне
views_embed_view('tovari', 'tovari_katalog1');
запихнуть в content правильно, чтобы не в шаблоне?

Комментарий оставлен 22.05.2015 - 02:28
$build['content']['system_main']['nodes'] = views_embed_view('tovari', 'tovari_katalog1');
Комментарий оставлен 22.05.2015 - 10:31

получилось так:

  function mpgrey_page_alter(&$build) {
  if (arg(0) == 'taxonomy' && arg(1) == 'term') {
    unset($build['content']['system_main']['nodes']);
    unset($build['content']['system_main']['pager']);
    $build['content']['system_main']['nodes'] = views_embed_view('tovari', 'block_2');
    dpm($build);
  }
}

но не работает. Ну и я так про себя думаю - а разве должно? Ведь стандартное содержимое $build['content']['system_main']['nodes'] - массив нод, а результат views_embed_view('tovari', 'block_2') - готовая вёрстка вьюхи.

Комментарий оставлен 22.05.2015 - 16:03
$build['content']['system_main']['nodes'] = array(
  '#markup' => views_embed_view('tovari', 'block_2'),
);
Комментарий оставлен 22.05.2015 - 16:11

Получилось! Спасибо Вам большое!
Ещё один вопрос: а нельзя ли теперь сделать так, чтобы ноды, которые добавляются Друпалом на страницу стандартными способом в массив $build['content']['system_main']['nodes'] (которые я всё равно потом делаю unset), никогда туда не добавлялись? Это же лишние запросы получаются, результат которых я всё равно не буду использовать.

Комментарий оставлен 22.05.2015 - 16:28

в hook_menu_alter навесьте свой page callback на taxonomy/term/%

Комментарий оставлен 22.05.2015 - 16:34

xandeadx, спасибо огромное! Вот бы ещё понять, как в этом колбеке прикрутить метатеги из модуля Metatag!

Комментарий оставлен 23.05.2015 - 19:19
1

Я бы не стал парится тут с кодом.
Ставим DS и разруливаем всё это. А вьюху в динамическое поле и тоже на вывод.

UPD

views_embed_view('tovari', 'tovari_katalog1');
// Может надо всё же передать параметр в контекстный фильтр?
views_embed_view('tovari', 'tovari_katalog1', 'ID_TAXONOMY_TERM');
Ответ дан 22.05.2015 - 00:59
Аватар пользователя SAM
SAM
212

Спасибо, только я с DS никогда не работал. Ну и я так учусь, с кодом :) А что значит "вьюху в динамическое поле"?

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

Комментарий оставлен 22.05.2015 - 02:32

В DS есть динамические поля. В них можно всё что угодно запихать, в том числе и вьюху. Эти поля содержат разное содержимое для разных типов сущностей. К примеру, в одном словаре таксономии будет вьюха, во втором блок с котятами, а в ноде типа "Товар" можно поставить картинку. И это всё через 1 поле.

Комментарий оставлен 22.05.2015 - 10:41

Спасибо, надо изучать. Кто-то где-то когда-то говорил, что DS может сказаться на производительности. Не замечали?

Комментарий оставлен 22.05.2015 - 15:54

Ну тут будет только догрузка ещё шаблона на выводе. Так что экономия на спичках ИМХО.

Комментарий оставлен 22.05.2015 - 22:18
0

Поставить views, включить taxonomy/term/%, настроить фильтры какие надо, если не достаточно, то использовать panels для увеличения гибкости настроек.

Ответ дан 22.05.2015 - 08:32

Стандартная вьюха не гибкая. Поэтому я так думаю ТС от неё отказался. А так да, Panels или DS.

Комментарий оставлен 22.05.2015 - 10:42

Действительно, отказался :) Об этом написано в теме.

Комментарий оставлен 22.05.2015 - 16:02