2015-02-03 3 views
0

Я новичок в 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); 

и безрезультатно.

Итак:

  1. есть способ, чтобы убедиться, что непроверенные фильтры оставаться скрытым?

  2. Есть ли лучшее решение, чем добавление вышеуказанного html-части вместе?

(обратите внимание, я не разбирался в Друпал апи поэтому отправка мне изменить TPL файлы или создавать собственный модуль не очень хороший вариант).

Пример:

фильтруется:

enter image description here

нефильтрованное (после нажатия кнопки применить):

enter image description here

ответ

0

Можете ли вы быть более конкретным о том, что вы хотите фильтровать?

Во всяком случае, я думаю, вы должны проверить этот модуль - https://www.drupal.org/project/webform_conditional

Вы также можете отменить Аякс от настроек заранее в представлении Drupal

+0

модуль Webform для добавления поданной зависимости при создании контента. im пытается показать или скрыть открытые поля фильтра в представлении. Я добавил изображение для лучшего понимания. как для удаления ajax - это не очень удобный пользовательский вариант, и я предпочитаю использовать это как последнее средство. –

+0

Ну, если вы придерживаетесь ajax, я бы подумал об использовании Angular и его параметров фильтрации. Это может вам помочь - https://www.youtube.com/watch?v=XYYi2x19ZTg https://www.youtube.com/watch?v=fkSXAnUFC4Y – Roysh

+0

фильтрация выполняется через представления drupal, я не собираюсь измените это, это будет взломать модуль и im далеко не знакомы с drupal api enpugh, чтобы попытаться, я просто, что делать простые манипуляции с html-интерфейсом –

Смежные вопросы