Задача:
На странице материала выводить блок с анонсами материалами, похожих на тот, который читаем.
Вывод блока осуществить при помощи модуля Views
Настроено:
1. Выводить только те ноды, у которых активен параметр "опубликовано" (при помощи фильтров views)
2. Запрет вывода анонса той ноды, на странице которой находимся (при помощи аргументов views)
Загвоздка:
1. Выводить только те документы, которые имеют тот же термин таксономии, что и просматриваемый документ.
Как решить Загвоздку?
Комментарии
Попробуйте cctags, он умеет делать такой блок (правда с views-ом пока не дружит)
Полезный модуль, взял на заметку. Однако хотелось бы реализовать при помощи Views по причине кастомного вывода тизеров. Да и модулей чтобы в системе не много болталось.
Arguments
Таксономия: Term ID -> Provide default argument -> PHP Code ->
<?php
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$node = node_load(arg(1));
$terms = taxonomy_node_get_terms_by_vocabulary($node, 4); // 4 - Id нужного словаря
return key($terms);
}
?>
найдено где-то на этом сайте
P.S. Вроде не ошибся
Неа, не хочет работать.
Попробую побыть ясновидящим ))
Поменяйте местами аргументы Таксономия: ID термина и Материал: Nid
Не помогает. С этим кодом вообще ничего не выводится
Странно в локале проверил - всё работает как требуется
1 аргумент - Таксономия: ID термина (с кодом)
2 агрумент - Материал: Nid (Подставить аргумент по умолчанию - ID материала из URL - Исключить аргумент)
Все точно, работает! Это я скосячил, поставил Таксономия: ID словаря
Спасибо большое за помощь!
У меня не работает.
Зависит ли этот код от формата строки URL?
Как должны быть описаны заголовки для этих аргументов?
Адрес ноды выглядит так: site.ru/news/[nid]
Pan4eZzz, не зависит. адрес вашего материала site.ru/node/[nid]
news/[nid] - это всего лишь алиас
блок на страницу вывели? у нод термины точно присвоены?
"4" в коде на номер своего словаря поменяли?
Все работает спасибо!
А как поставить условие вывода только определенного типа материалов с таким же термином таксономии (использующего тот-же словарь), отличного от выводимого в данный момент?
это уберёт текущий материал
а определённый тип выставьте фильтр по типу материала
Как вы сделали, не хрена не получается((
Всё сделал как описано, в превью Views всё работает, но блок на страницу не выводится
страница имеет юрл вида http://site.ru/alias/[nid]/[term-id]
то есть что то типа http://site.ru/products/67/85
если во вьюс в аргументах оставить только ID материала, то блок выводится, но соответственно не фильтрует материалы по термину таксономии, после добавления аргумента по ID термина с настройками:
Provide default argument
PHP Code
<?php
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$node = node_load(arg(1));
$terms = taxonomy_node_get_terms_by_vocabulary($node, 63); //63 - id словаря
return key($terms);
}
?>
ничего не выводится.
в превью вьюс ввожу аргументы вида 67/85, жму предпросмотр, и всё правильно работает.
В чем может быть проблема? Не силен в аргументах вьюс, может что то забыл в настройках указать, подскажите, пожалуйста.
P.S. проблему решил, всё нормально, внимательнее надо было читать=)
У меня не получается..
В представлениях, добавляю вид - блок.
Потом выставляю аргументы:
1 аргумент - Таксономия: ID термина (с кодом), Таксономия: Term ID -> Provide default argument -> PHP Code -
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$node = node_load(arg(1));
$terms = taxonomy_node_get_terms_by_vocabulary($node, 4); // 4 - Id нужного словаря
return key($terms);
}
?>
2 агрумент - Материал: Nid (Подставить аргумент по умолчанию - ID материала из URL - Исключить аргумент)
И ожидаю, что на сранице ноды, в блоке, появятся материалы совпадающие с термином ноды, но ни чего нет.
Да, и у меня у нод по несколько терминов..
Спасибо! Сам додуматься не смог :(. Иду читать мат.часть
http://drupal.org/node/65375
For D6 in Views 2:
Create a related content views block to list content with the same taxonomy of the current node:
Create View
Add Argument "Taxonomy: Term ID"
Argument configuration:
Provide default argument
PHP Code
Add this code:
if($node) {
foreach($node->taxonomy as $term) { $terms[] = $term->tid; }
return implode('+',$terms);
} else { return; }
Check ON: Allow multiple terms per argument.
Check ON: Reduce duplicates
Add Display: Block
Add Field: Title
Optional — Add Filter: Content Type (whatever type you'd like to filter)
http://drupal.org/node/65375#comment-3487772
Спасибо. А как сделать так, что бы это выводилось между нодой и комментариями к ней ?
Придется создавать регион.
Регион ?
Можно ведь поставить Views attach и прикрепить к ноде все что было созданно выше правда ?
Или может быть я не понял, что вы имеете ввиду под "прикрепить к ноде"?
Нет отнюдь. Выводится будет до коментариев, под нодой (правда для типа материала пост на форуме вообще не работает). После, это если выводить блоком в область контента.
Вообще спасибо, допиливаю, вроде бы все начинает работать, хотя конечно...
Кстати вот этот код:
<?php$node = node_load(arg(1));
if($node) {
foreach($node->taxonomy as $term) { $terms[] = $term->tid; }
return implode('+',$terms);
} else { return; }?>
почему-то влечет за собой ошибки и вывод красных сообщений по всему сайту.
Вообще неплохо и без красных сообщений по всему сайт раьотает вот этот код:
<?phpif (arg(0) == 'node' && is_numeric(arg(1))) {
$node=node_load(arg(1));
if($node->taxonomy){
foreach($node->taxonomy as $term) {$terms[] = $term->tid;
return implode('+' , $terms);}
}else{return;}
} else {
return false;
}?>
Но как и с другими у меня проблема, обрабтывается только первый тэг, т.е. схоство опледеляется только по первому тэгу текущей ноды, остальные игнорятся.
P.s. кстати для таких же как я, кто туп копирует коды, (скобка)php и все эти артифакты нйжно убирать, копировать только сам код, т.е. начиная с if
А галочка стоит наротив
-Разрешить множественные термины для аргументов. ?
Увы да, галочка стоит, но материалы только по первому тэгу. В php коде ведь написано foreach, это правильно же да ?
(Кстати друпал 6, views 2 )
Все то же самое вроде, но без капли кода делает similar by terms.
similar by terms - это аргумент вьюс.
по-русски "Аргумент Таксономия: Связанные термины"
similar by terms
Ну что бы получить этот аргумент, нужно установить модуль )
Вообщем в итоге с аргументом similar by terms все заработало как нужно, через views, но для этого мне конечно пришлось поступить как презренный червь и установить модуль
*А вдруг не видели*
Там не только аргумент появился, но еще новое поле и новый вид сортировки...
Зачем городить огород с аргументами, если вы уже установили готовый модуль?
Ну я утрирую.. (да там еще вид сортировки появляется и все такое) но модуль то по сути и нужен что бы появился этот аргумент. Он собственно только и делает что просто создает во views свой блок и еще своё поле. Из всего этого самым полезным является этот аргумент.
Хорошо, другой вопрос, возможно не по теме уже. Я вывожу не названия релевантных нод, а например превьюхи видеороликов, которые они содержат; но некоторые ноды не имеют превьюх (видосы из контакта например), следовательно они выводятся просто пустым местом в сетке (Style: Grid), как сделать так что бы для таких нод выводилась какая-то дефолтная картинка ?
Не захламляйте тему вопросами, которые к ней не относятся. Создайте свою тему и задайте там вопрос.
Для Drupal 7
$node = node_load(arg(1));
if($node) {
$terms = field_view_field('node', $node,'field_tags');
foreach ($terms['#items'] as $tid => $term) {
$tids[] = $term['taxonomy_term']->tid;
}
return implode('+', $tids);}
else { return; }
А мне вот нужно последние четыре материала, перед текущим выводить. И я уже замучался.
работает. надо только убрать <?php и ?>, у меня была эта проблема, всё работает без проблем.