Дано: интернет-магазин на D6 + Ubercart. Каталог товаров сделан с помощью Таксономии.
Требуется: сделать блок "Рекомендуемые товары" ("Вас может заинтересовать", "Советуем посмотреть") с помощью Views. В этом блоке нужно выводить товары из этой же категории, то есть товары с этим же термином (или терминами, если у текущего товара их несколько).
Проблема: как это реализовать с помощью Views? Когда-то делал что-то подобное с помощью Аргументов, но за давностью лет всё вылетело из головы. Наведите в нужную сторону. Где какие связи поставить?
Бонус: в идеале требуется настраиваемый блок "Рекомендуемых товаров". Такой, чтобы для определённых товаров можно было изменять "Рекомендуемые товары" вручную. С помощью Views такое возможно?
Комментарии
Решение первого вопроса нашёл здесь http://drupaleasy.com/blogs/ryanprice/2008/06/using-views-2-drupal-6-cre....
Вкратце: в представление добавляем Аргумент Таксономия: ID термина (ID термина таксономии) и настраиваем поля:
Если аргумента нет, то: Предоставить аргумент по умолчанию
Настройки аргумента по умолчанию
Тип аргумента по умолчанию: PHP-код
<?php$node = node_load(arg(1));
if ($node) {
foreach($node->taxonomy as $term) { $terms[] = $term->tid; }
return implode('+', $terms);
} else { return; }?>
Разрешить несколько терминов в аргументе: галка, если для вас это актуально
Устранить дубликаты: галка
При определённых условиях в "Рекомендуемом блоке" может появиться товар, на странице которого этот блок расположен. Так как это не есть хорошо, его оттуда нужно убрать. Для этого:
Добавляем второй Аргумент Материал: Nid (ID материала), выбираем условие
Если аргумента нет, то: Предоставить аргумент по умолчанию
Настройки аргумента по умолчанию
Тип аргумента по умолчанию: PHP-код
<?php$node = node_load(arg(1));
if($node){
return $node->nid;
} else {
return null;
}?>
И в условиях Аргумента в самом низу ставим галку Исключить аргумент. Готово!
Однако второй вопрос по-прежнему актуален.
Есть модуль названия не помню кажется similalterms чтото такое - он создает блок через вьюс.
Возможно так:
1-й блок "Похожие товары" через таксономия + similarterms
2-й блок "В комлекте с этим товаром рекомендуем". Через рефернес задаем что мы рекомендуем и выводим это с помощью viewfield на странице товара.
Еще можно сделать чекбокс в товаре и выводить только один из этих блоков в зависимости от того нажат ли этот чекбокс. Модулем context либо прописав условие в node.tpl.php для ноды товара.
Не поясните про референс и viewfield?
Поясните, пожалуйста, подробнее, как сделать такой чекбокс? Не имел раньше опыта работы с Context.
Задача не для новичка. Заходите на страницы модулей и там ищите документацию. Также часто в архиве с модулем есть Ридми.
Инструкции вот:
viewfield
http://drupal.org/node/1210142
context
http://www.youtube.com/results?search_query=drupal+7+context&oq=dru&gs_l...
Как сделать поле чекбокс в типе материала вам рассказать? Создайте поле, тип "Логический". Дальше разберетесь.
Большое спасибо за помощь, буду разбираться.
Пожалуй, отпишусь в эту тему конечное решение, возможно, кому-то ещё пригодится.
Отображение дополнительных товаров в итоге разделил на две части: Похожие товары и Рекомендуемые товары.
«Похожие товары» выводятся отдельным блоком так, как написано в первом сообщении темы.
«Рекомендуемые товары» реализовал через связку Viewfield + CCK Node Reference (в D6 — в составе CCK, для D7 используется References) и BackReference (создаёт обратные ссылки (которые CCK Node Reference по умолчанию не создаёт), например — с ноды B на A, если с A на B ссылка установлена). Ссылку на подробную инструкцию выше давал VasyOK, за что ему огромное спасибо, продублирую: http://drupal.org/node/1210142.
Так как мне попался самописный шаблон, вывод «рекомендуемых товаров» сделал с помощью несложного кода
<?php print $node->field_references_view[0]['view']; ?>
(вместо references_view, естественно, указываем своё название поля, созданного с помощью Viewfield)
Вывод легко настраивается с помощью Views.