Конфликт модулей Hierarchical Select и Global Filter

Главные вкладки

Аватар пользователя neba neba 13 августа 2013 в 16:22

Делал вот что:
1. С помощью таксономии создал словарь.
2. Привязал его к полю ноды.
3. Тип виджета в поле ноды выбрал hierarchical select, так как только он оставляет в памяти ноды родительские записи. То есть, если я выбрал "Хабаровск" (3 уровень), то в памяти сохраняется как "Хабаровск, Хабаровский край, Россия". Это мне необходимо и для правильной фильтрации по "глобал фильтру" и для центрирования гугл карты на регионе, который указан в ноде.
4. Создал блок глобал фильтр и привязал его к вьюсу.

Все прекрасно фильтруется и работает, но есть одно совсем не маленькое НО:
Если блок с глобал фильтром отображается на странице редактирования ноды (а так же почему то и если он отображался на предыдущей открытой странице), то при выборе термина первого уровня в поле ноды, поле исчезает (и в глобал фильтре и в редактируемой ноде) и больше не появляется. Браузер зависает. Как с этим бороться?

В глобал фильтре мне не важно, какой будет виджет, лишь бы места много не занимал. Можно автокомплит или тот же глобал фильтр или еще какой-нибудь. Проблема только в том, что я не могу разобраться как добавить тип виджета к глобал фильтру (кроме тех, которые есть в списке по умолчанию). В словаре будет огромное количество городов, регионов и стран, поэтому общий список или флажки поставить не получится.

Возможные варианты решения такие:
- включить на глобал фильтре виджет автокомплит, но я не могу разобраться как это сделать. Гуглил, форумы читал, не нашел, в хелпе одна строчка - типа "Вы легко можете добавить автокомплит на глобал фильтр".
- как то устранить конфликт иерархикал селектов, ссылающихся на одно поле. Я в php коде друпала - вообще "дуб дубом".

Помогите, чем можете. Воюю с этим конфликтом 3-ю неделю. Уже дважды сайт удалял полностью и перенастраивал заново в надежде, что косяк произошел при установке модулей - нет, оказалось не при установке :(((.

Комментарии

Аватар пользователя neba neba 15 августа 2013 в 14:32

Как то печальненько ((( Неужели никто с такой проблемой не сталкивался? Эта проблема должна была возникнуть у каждого, кто делал у себя на сайте выбор города через hierarchical select

Аватар пользователя otolaa otolaa 20 января 2014 в 21:39

У меня в alpha 5 c Global Filter в блоке несовместимость пропадает вся цепочка при выборе последнего или первого "нет" термина ,, тукаюсь тоже с этим

Аватар пользователя Junegton Junegton 21 января 2014 в 15:57

ядро (7.24) + Global Filter (7.x-1.11) + Hierarchical Select (7.x-3.0-alpha6)

тьфу-тьфу-тьфу, пока проблем не было замечено
схема работы - куча материала с различными наборами терминов из двух словарей. 1 - собственно и есть глобальный список, по нему после выполняется сортировка. 2 словарь имеет глубину вложения, по нему идет выбор определяющих терминов материала.

фактически получается что первый словарь содержит только родительские термины второго, но при таком раскладе, все работает. Главное и сортировка отрабатывает. Хотя есть неудобство - двойной выбор - сперва для для глобальной сортировки, после для определяющих терминов через Hierarchical Select.

Аватар пользователя neba neba 22 января 2014 в 4:34

Junegton, если сделать так, как предлагаете Вы, то в первом фильтре я выбираю страну (Россия, Украина, Монголия и т.д.), а во втором выбираю город. Тогда получается, что город (например, "Волгоград") будет появляться и в России и на Украине и в Монголии. Как Вы отфильтровали второй список Global Filter после выбора первого? Если использовать Composite Filters, то очень геморно получится прописывать это во вьюхе, так как у меня будет большое количество стран.

В настоящее время я ограничил появление блока глобал фильтр только на главной странице сайта. Вроде бы как работает, но не очень элегантно. Хотелось бы, что бы фильтр всегда был "на виду". Решений пока не нашел. Изучаю потихоньку API Друпал. Может, со временем, напишу сниппет. Если бы решение нашлось из стандартных модулей, то было бы намного лучше.

Аватар пользователя neba neba 2 марта 2014 в 10:15

Нашел. Не очень "элегантное" решение, но все таки хоть как то работает. Для этого, я поставил глобал фильтр только на главной странице. А там, где добавляется материал или просматривается, блок глобал фильтра не вывожу. Еще сделал дополнительный блок со сниппетом, выводящим значение выбранного региона (что бы регион был на виду у посетителя):

<?php
$selectedGlobalFilters = global_filter_get_session_value('field_allregio');
$myGlobalFilter = '';
if (!empty($selectedGlobalFilters)) {
$i = sizeof($selectedGlobalFilters);
foreach ($selectedGlobalFilters as $key => $selectedFilter) {
$selectedFilter = (int) $selectedGlobalFilters[$i-1];
if ($selectedFilter !=0 ) {
$selectedRegioName = get_object_vars(taxonomy_term_load($selectedFilter));
if ($i!=1) {$myGlobalFilter = $myGlobalFilter.$selectedRegioName['name'].', ';}
else {$myGlobalFilter = $myGlobalFilter.$selectedRegioName['name'];}
$i = $i-1;
}
}
}
if (!empty($myGlobalFilter)) {echo '

'.$myGlobalFilter.'

';}
else {echo '

Регион не выбран

';}
?>

Ну вот, как то так и работает )))