Вывода списка с мультивыбором в фильтре

Как сделать вывод в фильтре не чекбоксами, а обычным списком

 
Посетитель
no avatar
Сообщений: 62
Приветствую.
Вопрос к знатокам: Как сделать вывод списка с мультивыбором в фильтре в виде обычного списка <select> а не чекбоксов.
Если просто в наглую заменить заменить функции в system/fields/listmultiple на те что содержаться в просто system/fields/list, то по этому полю фильтр работать перестает.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3588
Простой заменой одного файла на другой ничего не выйдет.
Если просто поменять все такие списки в нужный вам вид, то достаточно внести правки в файл \system\libs\html.helper.php строка где-то 551
Код PHP:
  1. function html_select_multiple($name, $items, $selected=array(), $attributes=array(), $is_tree=false)
или поправить файл вашего шаблона templates\вашшаблон\assets\fields\listmultiple.tpl.php где вместо
Код PHP:
  1. html_select_multiple($field->element_name, $items, $value, array('id'=>$field->id));
вставить свою похожую функцию или код самого селекта.
Что касается вывода только в фильтре, то лучше сделать копию поля listmultiple с нужным видом и в нужных типах контента установить тип этого поля вместо стандартного.
Реклама
cms
Посетитель
no avatar
Сообщений: 62
Loadырь:

Простой заменой одного файла на другой ничего не выйдет.
Если просто поменять все такие списки в нужный вам вид, то достаточно внести правки в файл \system\libs\html.helper.php строка где-то 551
Код PHP:
  1. function html_select_multiple($name, $items, $selected=array(), $attributes=array(), $is_tree=false)
или поправить файл вашего шаблона templates\вашшаблон\assets\fields\listmultiple.tpl.php где вместо
Код PHP:
  1. html_select_multiple($field->element_name, $items, $value, array('id'=>$field->id));
вставить свою похожую функцию или код самого селекта.
Что касается вывода только в фильтре, то лучше сделать копию поля listmultiple с нужным видом и в нужных типах контента установить тип этого поля вместо стандартного.
А можете немного подробнее пояснить?
Файл шаблона как я понимаю отвечает за вывод в момент создания\изменения записи. А вот в фильтр это поле выводится на основе соответствующего файла из system/fields:
Код PHP:
  1. return html_select_multiple($this->name, $items, $value);
Вот эту строку я меняю на:
Код PHP:
  1. return html_list_multiple($this->name, $items, $value);
html_list_multiple я сделал на в html.helper.php на основе html_select_multiple и она имеет такой вид:
Код PHP:
  1. function html_list_multiple($name, $items, $selected='', $attributes=array()){
  2. $attr_str = html_attr_str($attributes);
  3.  
  4. $html = '<select name="'.$name.'" '.$attr_str.'>'."\n".'<option></option>'."\n";
  5.  
  6. foreach ($items as $value=>$title){
  7.  
  8. if ($selected == $value) { $sel = 'selected'; } else { $sel = ''; }
  9.  
  10. $html .= "\t" . '<option value="'.htmlspecialchars($value).'" '.$sel.'>'.htmlspecialchars($title).'</option>' . "\n";
  11.  
  12. }
  13. $html .= '</select>'."\n";
  14. return $html;
  15. }
И вот теперь выводится то оно как надо, но фильтр не работает, выводит пустое значение. Собственно если привести этот файл из system/fields к виду файла отвечающему за вывод простого списка, то все равно фильтр работать отказывается, но это я уже в начале описывал и уже осознал что это не корректный путь smile Куда копать дальше?
Редактировалось: 2 раз (Последний: 10 июня 2015 в 21:07)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3588
Iceman, за вывод в фильтре по моему отвечает функция - public function getFilterInput($value) в файлах \system\fields\list.php и \system\fields\listbitmask.php (второй вроде за мультиселект отвечает).
В вашем html_list_multiple я не увидел слова multiple, ни в коде, ни в передаваемых атрибутах. Возможно с этим связана его неработоспособность.
Редактировалось: 1 раз (Последний: 10 июня 2015 в 21:17)
Посетитель
no avatar
Сообщений: 62
Loadырь:

Iceman, за вывод в фильтре по моему отвечает функция - public function getFilterInput($value) в файлах \system\fields\list.php и \system\fields\listbitmask.php (второй вроде за мультиселект отвечает).
В вашем html_list_multiple я не увидел слова multiple, ни в коде, ни в передаваемых атрибутах. Возможно с этим связана его неработоспособность.

Насколько смог понять я, именно getFilterInput($value) в указанных Вами файлах и отвечает за вывод, а applyFilter($model, $value) собственно за обработку фильтра. В новом поле вне зависимости от того в какой вид я его привожу (как в listbitmask.php или как в list.php) фильтр работать отказывается.

С multiple я знаком, в html_list_multiple его нет потому, что мне нужен в фильтре простой список, с единственным возможным вариант выбора, возможность выбора нескольких значений нужна только в момент создания/изменения записи. В любом случае установка этого атрибута картину все равно не меняет, фильтр по этому полю работать не начинает.
Редактировалось: 2 раз (Последний: 10 июня 2015 в 21:44)
Посетитель
no avatar
Сообщений: 62
На всякий случай напишу как сейчас выглядит новое поле:
в system/fields/selectmulti.php:
Спойлер
в templates/default/assets/fields/selectmulti.tpl.php:
Спойлер
Собственно эти файлы практически идентичны изначальным файлам списка с мультивыбором из файлов listbitmask
И в libs/html.helper.php:
Спойлер
Редактировалось: 3 раз (Последний: 11 июня 2015 в 10:38)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3588
Iceman, я бы избавился от кода который в libs/html.helper.php и перенёс его в файл поля. Это избавит вас от рутины при обновлении движка и этого файла. В итоге у вас получится свой тип поля независимый от изменения файлов движка.
Посетитель
no avatar
Сообщений: 62
Loadырь:

Iceman, я бы избавился от кода который в libs/html.helper.php и перенёс его в файл поля. Это избавит вас от рутины при обновлении движка и этого файла. В итоге у вас получится свой тип поля независимый от изменения файлов движка.

С этим согласен, перенесу. Но все же главный вопрос остался не решенным, как сделать, что бы это поле функционировало, куда копать? :)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3588
Если вам нужен мультисписок при создании контента и простой список при выборе в фильтре, тогда так
Спойлер
или так
Спойлер
Редактировалось: 1 раз (Последний: 11 июня 2015 в 09:59)
Посетитель
no avatar
Сообщений: 62
Loadырь,
Или лыжи плох едут или даже не знаю smile
Попробовал заменить на написанное Вами, но все равно фильтр не работает, ничего не возвращает. Сейчас поле выглядит так (заменил дополнительно getFilterInput что бы нормально выводилось после применения фильтра и перенес в него функцию html_list_multiple):
Спойлер
Может быть в applyFilter чего то не хватает?
Редактировалось: 1 раз (Последний: 11 июня 2015 в 10:36)
Посетитель
no avatar
Сообщений: 62
Loadырь, знатоки, отзовитесь! :)
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
Iceman:
Приветствую.
Вопрос к знатокам: Как сделать вывод списка с мультивыбором в фильтре в виде обычного списка <select> а не чекбоксов.
Если просто в наглую заменить заменить функции в system/fields/listmultiple на те что содержаться в просто system/fields/list, то по этому полю фильтр работать перестает.
А если попробовать не трогать движок, а поменять шаблон вывода чекбоксов - стилизовать его под селект? Например как здесь: http://stackoverflow.com/questions/17714705/how-to-use-checkbox-inside-select-option При желании и галочки можно скрыть, но с ними, IMHO, юзабельнее)))
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проектаКубок зрительских симпатий
Сообщений: 3093
Мне тоже интересно! Тоже попробую поковырять
Посетитель
no avatar
Сообщений: 62
Val, Довольно хороший вариант, но в моем случае там очень много вариантов выбора, поэтому придется ещё прикручивать поиск и скролинг, что для списков реализовано уже весьма достойными на мой взгляд скриптами на подобии chosen. А вот сворачивание чекбоксов при помощи jquery в список уже начинает себя вести как и в случае с ковырянием в движке: на вид все хорошо, но фильтр не отрабатывает.

Jestik, Есть подозрение, что в самом фильтре заложена обработка checked состояния чекбоксов и selected списка банально не обрабатывается, хотя на первый взгляд не нашел такого в функции фильтра в model.php.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3588
Iceman, забирай
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: