Я новичок в Drupal, и я пытаюсь создать представление со многими параметрами фильтра, , потому что у него много полей фильтров, я хочу, чтобы они были скрыты и показывать только поля фильтра, которые пользователь решает, что хочет видеть в данный момент времени.Как скрыть и показать пользовательскую форму фильтра на вид drupal
Я не мог найти модуль, чтобы получить указанное влияет, так что я пытался использовать панели и добавить свой собственный HTML и JQuery пользовательского кода:
HTML
<input type="button" id="filter-selection-toggle-button" value="show filters"/>
<div id="my-filter-selection">
<input type="checkbox" value="edit-field-1">field 1</input><br/>
<input type="checkbox" value="edit-field-2">field 2</input><br/>
<input type="checkbox" value="edit-field-3">field 3</input><br/>
<input type="checkbox" value="edit-field-4">field 4</input><br/>
<input type="checkbox" value="edit-field-5">Dimention</input><br/>
<input type="button" id="filter-button" value="filters button"/>
</div>
JQuery:
<script type="text/javascript">
// We define a function that takes one parameter named $.
(function ($) {
$(document).ready(function()
{
var showCheckedFilters=function(event)
{
var x=$("input:checkbox:checked");
var y=$("input:checkbox:not(:checked)");
var checkedFilters="";//array of checked filters
var unCheckedFilters="";//array of checked filters
var toggleSpeed=event.data.toggleSpeed;
for (var i=0;i<x.length;i++)
{
checkedFilters=checkedFilters+"#"+$(x).eq(i).val()+",";
}
for (var i=0;i<y.length;i++)
{
unCheckedFilters=unCheckedFilters+"#"+$(y).eq(i).val()+",";
}
if (checkedFilters!="")
{
// remove comma
провереноFilters = checkedFilters.substring (0, checkedFilters.length-1); $ (checkedFilters + ", view-filters"). Show (toggleSpeed); } else // все не отмечены { $ (". View-filters"). Hide (toggleSpeed); }
if (unCheckedFilters!="")
{
// remove comma
unCheckedFilters=unCheckedFilters.substring(0,unCheckedFilters.length-1);
$(unCheckedFilters).hide(toggleSpeed);
}
};
// Now use jQuery with the $ shortcut again like you normally would
$("#my-filter-selection,.view-filters").hide();
//showCheckedFilters();//hide nondefault filters
$("#filter-selection-toggle-button").click(function(){$("#my-filter-selection").toggle(500);});
$("#filter-button").click({toggleSpeed:500},showCheckedFilters);
//$("#edit-submit-items-in-market").click({toggleSpeed:0},showCheckedFilters);
//to do on every reload of the filters
$(document).ajaxComplete({toggleSpeed:0},showCheckedFilters);
});
// Here we immediately call the function with jQuery as the parameter.
}(jQuery));
</script>
Все кажется, работает хорошо, пока до друпал фильтр фактически не используется, по-видимому, Друпал перезагружается поля фильтра с помощью Ajax и не только содержание, в котором указать все фильтры появляются снова.
Для того, чтобы избежать этого я попытался захватить АЯКС вызова с помощью
$(document).ajaxComplete({toggleSpeed:0},showCheckedFilters);
или добавить свой собственный вызов на кнопку друпал представить:
$("#edit-submit-items-in-market").click({toggleSpeed:0},showCheckedFilters);
и безрезультатно.
Итак:
есть способ, чтобы убедиться, что непроверенные фильтры оставаться скрытым?
Есть ли лучшее решение, чем добавление вышеуказанного html-части вместе?
(обратите внимание, я не разбирался в Друпал апи поэтому отправка мне изменить TPL файлы или создавать собственный модуль не очень хороший вариант).
Пример:
фильтруется:
нефильтрованное (после нажатия кнопки применить):
модуль Webform для добавления поданной зависимости при создании контента. im пытается показать или скрыть открытые поля фильтра в представлении. Я добавил изображение для лучшего понимания. как для удаления ajax - это не очень удобный пользовательский вариант, и я предпочитаю использовать это как последнее средство. –
Ну, если вы придерживаетесь ajax, я бы подумал об использовании Angular и его параметров фильтрации. Это может вам помочь - https://www.youtube.com/watch?v=XYYi2x19ZTg https://www.youtube.com/watch?v=fkSXAnUFC4Y – Roysh
фильтрация выполняется через представления drupal, я не собираюсь измените это, это будет взломать модуль и im далеко не знакомы с drupal api enpugh, чтобы попытаться, я просто, что делать простые манипуляции с html-интерфейсом –