Доброй ночи! Имеется 2 словаря Категории и Производители, и связанные ноды с их терминами, также термины словаря производителей связанны с терминами категорий. Нужно каким то образом в views на странице термина категории чтобы выводились ноды привязанные к производителям связанных с этой категорией (по аналогии с вложенным фильтром с глубиной только другой словарь). Возможно ли это каким то образом сделать в контекстном фильтре?
Фильтровать ноды по терминам связанного термина в views
Главные вкладки
Лучший ответ
Похоже такое никто не делал или испугался сделать).
Решение:
1. Добавляем пару связей во вьюхе к категориям и производителям и убираем все контекстные фильтры
2. Добавляем хук на алтер запроса вьюхи
<?php
function module_views_query_alter(&$view, &$query)
{
if ($view->name == 'product_cart')
{
//получаем дочерние термины категории или производителей
$id_term = (int)arg(2);
$term_base = taxonomy_term_load($id_term);
$tids[] = $id_term;
foreach (taxonomy_get_tree($term_base->vid, $id_term) as $terms) {
$tids[] = $terms->tid;
}
$or_query = db_or()->condition('field_data_field_'.$term_base->vocabulary_machine_name.'.field_'.$term_base->vocabulary_machine_name.'_tid', $tids, 'IN');
if($term_base->vid == "3")
{
//получаем привязанные термины производителей если это категория
$query_manufactured = new EntityFieldQuery();
$query_manufactured
->entityCondition('entity_type', 'taxonomy_term')
->propertyCondition('vid', '6')
->fieldCondition('field_cats', 'tid', $id_term, '=');
$result_m = $query_manufactured->execute();
if(!empty($result_m['taxonomy_term']))
{
foreach($result_m['taxonomy_term'] as $term2){
$tids_manufactured[] = $term2->tid;
}
$or_query->condition('field_data_field_manufacturer.field_manufacturer_tid', $tids_manufactured,'IN');
}
}
//добавляем условие фильтрации по категории или по производителю
$query->add_where(0, $or_query);
}
}
?>
Комментарии
Похоже такое никто не делал или испугался сделать).
Решение:
1. Добавляем пару связей во вьюхе к категориям и производителям и убираем все контекстные фильтры
2. Добавляем хук на алтер запроса вьюхи
<?php function module_views_query_alter(&$view, &$query)
$or_query->condition('field_data_field_manufacturer.field_manufacturer_tid', $tids_manufactured,'IN');
//добавляем условие фильтрации по категории или по производителю
{
if ($view->name == 'product_cart')
{
//получаем дочерние термины категории или производителей
$id_term = (int)arg(2);
$term_base = taxonomy_term_load($id_term);
$tids[] = $id_term;
foreach (taxonomy_get_tree($term_base->vid, $id_term) as $terms) {
$tids[] = $terms->tid;
}
$or_query = db_or()->condition('field_data_field_'.$term_base->vocabulary_machine_name.'.field_'.$term_base->vocabulary_machine_name.'_tid', $tids, 'IN');
if($term_base->vid == "3")
{
//получаем привязанные термины производителей если это категория
$query_manufactured = new EntityFieldQuery();
$query_manufactured
->entityCondition('entity_type', 'taxonomy_term')
->propertyCondition('vid', '6')
->fieldCondition('field_cats', 'tid', $id_term, '=');
$result_m = $query_manufactured->execute();
if(!empty($result_m['taxonomy_term']))
{
foreach($result_m['taxonomy_term'] as $term2){
$tids_manufactured[] = $term2->tid;
}
}
}
$query->add_where(0, $or_query);
}
}
?>
Хм.. Если я правильно понял структуру связей сущностей, должно и без кода работать.
Вьюс.
Выборка по товарам.
Связи: Товар -> Производитель -> Категория
Контекстный фильтр: ID Категории