Здравствуйте.
Делаю каталог товаров, основанный на словаре таксономии, вывожу его через views (стандртный модуль uc_catalog отключен)
Словарь ссылается на 2 типа материалов - стандартный product и клонированный page, который называется 'Описание категории' (просто чтобы не путаться в типах материалов).
Термины словаря имеют 3 уровня вложенности:
термин 1
--термин 1.1
----термин 1.1.1
----термин 1.1.2
---- ...
--термин 1.2
----термин 1.2.1
и т.д.
Ноды типа 'товар' привязаны к последним (по вложенности) терминам словаря, а 'описания категории' - ко всем.
Создал 2 представления: category_list и product_grid, выбираю какой из них использовать с помощью модуля TVI.
Со вторым представлением все хорошо, а в первом застрял на такой проблеме:
нужно вывести в шапке заголовок категории, соответствующей текущему термину а под ней - список описаний категорий, соответствующих подтерминам текущего термина, т.е. если выбран термин 1, то вывод должен выглядеть так:
Заголовок 1
Содержимое 1
Заголовок 1.1
Содержимое 1.1
Заголовок 1.2
Содержимое 1.2
(заголовки описаний подкатегорий являются ссылками на следующий уровень)
для этого в представлении category_list создаю вид 'вложение' который прикреплен к странице и выводится перед ней.
аргумент - таксономия:ID термина, поля - Материал:Заголовок, Материал:Содержимое, здесь тоже все хорошо.
Теперь в виде 'страница' нужно вывести ноды, у которых термины таксономии являются дочерними к текущему термину.
Если в качестве аргумента взять ID Термина с глубиной = 1 , то выводятся ноды с текущим и дочерними терминами, и описание текущей категории выводится дважды: в шапке (где ей место) и в списке (где ей не место).
Пытался прикрутить Term ID depth modifier - вообще не смог понять, что он делает.
Возможно, стоит настроить проверку аргументов через PHP, что-нибудь вроде return $argument != нода.tid; но не знаю, как добраться до tid
Пробовал в качестве аргумента указывать Таксономия:Связанные термины и включать чекбокс 'Исключить аргумент' - на втором уровне (если текущим является термин 1.1) в списке выводятся ноды с терминами первого уровня (термин 1, термин 2 и т.д.)
Подскажите, пожалуйста, как можно решить.
Комментарии
Боюсь что тут придется писать расширение под views. для таксономии этого пока что не заложено.
Решено методом Мюнца:
в файле sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid_depth.inc
строку $where = " WHERE tn.tid $placeholder\n"; (у меня это строка 103) заменил на
$where = " WHERE tn.tid = 0\n";
Это модифицировало запрос SQL:
...AND (node.vid IN (
SELECT tn.vid FROM term_node tn
LEFT JOIN term_hierarchy th ON th.tid = tn.tid
LEFT JOIN term_hierarchy th1 ON th.parent = th1.tid
WHERE tn.tid =
ID текущего темина таксономии0 (заведомо False)OR th1.tid = ID текущего термина таксономии
))
По-хорошему, надо бы сделать возможность в аргументе 'ID Термина (с глубиной)' указывать начало и окончание этой глубины, но руки пока выросли только чтобы резать чужой код
Никто не хочет поправить?
Все руки не доходят... Надо несколько расширений написать, например поддержку простейших математических операций с возможностью сортировки по этому полю.
Решил проблему без ковыряния кода с помощью модуля Views Field View
Для вывода подкатегорий создал отдельное представление category_sublist, в котором аргументом является ID родительского термина таксономии.
В представлении category_list в виде страница настроил поле Глобальный: Просмотр (не знаю, как точно будет называться по-английски, это поле добавляет модуль Views Field View), которое вызывает представление category_sublist и передает ему в качестве аргумента ID текущего термина таксономии.
Решение получилось тяжелее прежнего, но зато без быдлокода.
М.б. кому-нибудь пригодится.
Спасибо за способ, но можно по подробнее? Какое должно быть view category_sublist, что оно должно выводить?
И остальное. А то никак не выходит "каменный цветок"
Andruxa, огромное спасибо за разъяснения!
Я уже отчаялась сделать то, что мне надо, нагородила кучу сниппетов, а решение, в вашем объяснении, оказалось очень простым и эллегантным. Более всего порадовало, что на страницах терминов можно выводить и ноды самого термина и дочерние в абсолютно любом виде.
Единственный недостаток данного метода - обязательная! необходимость все хорошо кешировать (из-за использования Views Field View).
По-моему, проще будет объяснить, увидев ваш словарь таксономии.
Хорошая тема, но не могу понять некоторые вещи.
У меня словарь выглядит так:
Категория-1
- подкатегория 1
- подкатегория 2
- подкатегория 3
Категория-2
- подкатегория 1
- подкатегория 2
- подкатегория 3
Вот при нажатии на "Категория-1" хотелось бы вывести все "подкатегории" как заголовки, и под каждой подкатегорией блок с определенным количеством нод.
Как сделать не могу понять....
Подскажите плиз.
Пару вариантов:
Первый - попроще:
создаем представление,
Аргумент: термин таксономии (с глубиной), в вашем случае - глубина =1 (один уровень вложенности в словаре),
в полях добавляем "Таксономия: Термин", включаем флажок "Исключить из вывода", там же добавляем необходимые поля нод.
в настройках вида (Defaults или Страница, если последнюю предется переопредолять) в настройках стиля (шерстеренка рядом):
"Группировать по полю:" выбираем "Термин" (заголовок поля "Таксономия: Термин")
Этот способ будет правильно работать в том случае, если к терминам таксономии верхего (нулевого) уровня не привязаны ноды.
Иначе они будут выводиться вместе с нодами, привязаным к следующему (первому) уроню словаря.
Собственно, из-за этого и появился этот пост
Если же ноды привязываются ко всем терминам словаря, то следует воспользоваться модулем Views Field View, с помощью которого можно вложить одно представление в другое.
тогда в первом представлении нужно заменить аргумент на "Таксономия: Родительский термин"
и создать второе представление, которое будет вызывать первое:
аргумент: "Таксономия: ID термина",
поля: "Глобальный: Просмотр" (это поле создается модулем Views Field View).
тем самым из вывода исключаются ноды, привязанные к самому термину таксономии (например - Категория-1) и выводятся ноды, привязанные к его подтерминам (подкатегория 1,2,3).
Некоторые вещи писал по памяти, проверяйте.
С группировкой по термину все понятно. А как же например сделать такое с помощью Views Field View:
Создать страничное представление с заголовками
- подкатегория 1
- подкатегория 2
- подкатегория 3
и под каждой подкатегорией вывести блок (с more link и с четко заданными количеством таваров)
Нажали на родителя Sport и вывелись подтермины и блоки этих подтерминов с четким количеством товаров (4 или 6) и ссылкой на страницу подтермина.
В первом представлении (список нод подкатегории) - "Элементы для показа:" 4, насчет ссылки "далее" надо понять, что по ней будет открываться, проще всего - в настройках "Ссылка "Ещё":" - Да
Вместо группировки можно во втором представлении добавить поле "Таксономия: Термин" перед полем "Глобальный: Просмотр"
Например создал представление subcategories, в нем показываю 4 элемента, выбираю поля для элементов. Ставлю ссылку more. Тогда какой аргумент здесь должен быть задействован?
Затем создаю еще представление для вывода этого дела. В настройках ставлю неограниченный показ элемнтов, как поле выбираю представление созданное первым. Соответственно тоже не понятно с аргументами.
У меня выводится ровно столько полей "Просмотр" сколько нод относится к данной подкатегории.
Например,
Таксономия: ID термина, включить "Перезаписать вывод для этого поля", текст: "more", чекбокс "Выводить это поле в виде ссылки",
Путь ссылки: taxonomy/term/[tid], классы по вкусу.
Появится ссылка "more", указывающая на подтермин (ему можно настроить отдельное представление, где будут показаны все ноды подтермина)
Не мое, но покажу: http://druit.ru/blogs/views/18
Написал простенький модуль для views, результат можно посмотреть тут Кому будет интересно, пишите - договоримся.
Что он делает - добавляет поле, которое формирует список терминов нижнего уровня. Формирование происходит после того, как из БД извлекается список терминов первого уровня (т.е. после этого формируется второй запрос на получение под-терминов). Таким образом улучшается производительность.
[Решение] Замена Ubercart, с помощью Views, вывода категорий, подкатегорий и списка товаров [Два метода]
Метод 1 www.ArtReaktor.com
Метод 2 www.ArtReaktor.com
В данных статьях описывается как заменить вывод категорий и подкатегорий и списка товаров Ubercart, с помощью Views.
Решение для система Drupal 6.х (в данном случае испытывалось на версии 6.22)
Цель:
Более гибкий вывод списка товаров, а именно:
Корректное применение Views Exposed filters для списка товаров категории.
и другие приятные возможности Views
Решено вывод информации о подкаталогах (child term или дочерние термины) без повторяющихся нодов.
люди вот у меня такая иерархия
Термин
-термин
-термин
-термин
Термин
-термин
-термин
-термин
вот хочу чтоб когда кликаешь по родительскому термину выдвигались подтермины( сделал как предлагает Andruxa с помощью модуля Views Field View
но у меня получается когда я захожу по пути только термины к которым привязаны ноды((как решить кто поможет?? скрины views прикреплены кому не влом обяснить куда тыкать мой Skype (mc_amidix)
+
давидимо топик забросили
Возможно ответ уже был, но я перепробовал всё, что было здесь написано))
А мне нужно:
У меня есть словарь вида:
-Артикул 1
--его цвет 1
--его цвет 2
--его цвет 3
-Артикул 2
--его цвет 1
--его цвет 2
--его цвет 3
Каждый артикул с его цветом - это НОДА, мне нужно в ноде выводить список остальных цветов данного артикула, кроме цвета текущей ноды.
Помогите понять и разобраться, как это сделать с помощью views...
А ешё у меня во views не отображается запрос SQL ---- это где-то настраивается?)
Заранее спасибо!