DARTHARTH

Фильтрация таблицы по значения на JS

Недавно стала задача — сделать возможность удаления результатов вебформ на 7 друпале выборочно, т.е. не полностью очисткой всего всего … Сама по себе задача муторная, тем более, что operation bulk не дружит ни в какую в представлениях с результатами вебформ, а норовит только удалить полностью ноду, т.е. саму форму.

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

array('data' => t('IP'), 'field' => 'ip'),

в 70

$ip = $data->data;

и 75

$ip,

Также, в 59 строку добавим

$query->range(0,15000);

Что бы как то ограничить количество выводимых строк, ибо при 20 тысячах результатов страница при открытии тупо висла намертво.

Итак, есть таблица, но вручную через поиск по странице браузера искать спамные айпишники и ставить чекбоксы долго и не удобно, по этому после долгого гугления нашел вариант вставить перед формой инпут и скрипт, с помощью которого будет идти поиск значения таблицы и в случае совпадения фильтрация — строки таблицы не отвечающие требованиям поиска будут скрываться. Таким образом у нас останутся только те строки с чекбоксами, которые нам нужно удалить.

Итак, скрипт который всё делает

<script>
    function myFunction() {
        var input, filter, table, tr, td, i, txtValue;
	input = document.getElementById("myInput");
	filter = input.value.toUpperCase();
	table = document.getElementById("DelTable");
	tr = table.getElementsByTagName("tr");
	for (i = 0; i < tr.length; i++) {
	  td = tr[i].getElementsByTagName("td")[4];
	  if (td) {
	    txtValue = td.textContent || td.innerText;
	      if (txtValue.toUpperCase().indexOf(filter) > -1) {
		tr[i].style.display = "";
	      } else {
		tr[i].style.display = "none";
	      }
          }       
	}
      }
</script>

И перед самой таблицей ставим инпут

<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for value..." title="Type in value">

Как видно в скрипте идет обращение к айди таблицы, с чем возникла проблема, т.к. таблица массового удаления генерируется модулем и у него нет своего шаблона. Добавить айдишник для скрипта фильтрации можно таки сприптом

jQuery(document).ready(function($){
  $('table.table-select-processed').attr('id', 'DelTable');
});

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll Up