Forums / National / Russian / Идеи / Множественный выбор в настройках параметров плагинов

Пример реализации

Macik
#1 2012-09-26 03:04

Не первый раз при разработке расширений сталкиваюсь с необходимостью использовать в настройках плагинов поле с мультивыбором (сейчас доступен только Select с выбором одного значения).

Посмотрел как устроен парсинг параметров при установке и настройке плагина - решил, что малой кровью дописать реализацию не выйдет. Надо править насколько файлов (extensions.php, admin.config.php, admin.extensions.php).

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

Может кто-то уже решал подобную задачу?

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
This post was edited by Macik (2012-10-31 14:44, 11 years ago)
esclkm
#2 2012-09-26 06:00

решал - для плагина новостей)

да и множественный выбор будет имет ряд проблем)))

как и файловое поле в конфиге

littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
Sergey
#3 2012-09-26 06:13

Уже выкладывал описание http://www.cotonti.com/datas/users/regularstructure-v4_205.pdf

www.cotonti.mobi
Macik
#4 2012-09-28 01:41
#35620 Sergey:

Уже выкладывал описание http://www.cotonti.com/datas/users/regularstructure-v4_205.pdf

Масштабно (объем работ ого-го!). Но немного не о том, что я имел в виду.

 

Вот набросал - в виде отдельного плагина (extdev_multiselect).

Цель 

С минимальными затратами дать возможность разработчику плагинов получить «Multiselect» в меню настроек своего плагина:

extdev_2012-09-28_04-05_461.png

 

Как это работает

Все что надо, чтобы получить «multiselect» параметр в своем плагине это добавить его как обычный текстовый параметр в Setup файл. Чтобы он опознался системой как «multiselect» параметр надо дать ему специальное имя вида: «varname_type», где `varname` это любое имя как у обычного параметра, а `type` это тип «multiselect» элемента.

Пример: test1_multiselect=01:text:item1,item2,item3,item4,item5:item1,item3:«Multiselect» параметр

Доступны 3 типа элементов UI (см.иллюстрацию):  `simplelist`, `multiselect`, `checkboxlist`.

 

Как это использовать

использовать можно двумя способами:

1. [сложный, но более гибкий] скопировать часть кода из файлов extdev_multiselect.rc.php и extdev_multiselect.admin.conf.php в свой плагин, исправив пару переменных . 

2. [совсем простой] просто подключить параллельно со своим плагином, установив в настройках режим `global`.

(естественно не забыв добавить нужные параметры в свой плагин или изменив старые).

 

Попробовать:

Код на ГитХабе: https://github.com/macik/cot-extdev_multiselect

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
esclkm
#5 2012-09-28 06:18

я за ввдение чеклистбокса и мультиселекта в коробку

 

littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
Alex300
#6 2012-09-28 10:40

Я тоже за!

С небольшим дополнением:

стандартный мультиселект неудобен тем, что при большом количестве вариантов можно запутаться в том что уже выбрано, а что нет, т.к. расстояние между выбранными пунктами может быть большим. И стоит случайно кликнуть на какой нибудь пункт - выбор пропал - начинай сначала.

Имело бы смысл внедрить что то вроде этого: http://quasipartikel.at/multiselect_original/ (в реализации возможны варианты, и не обязательно как в примере использовать jQueryUI)

Добавлено 1 минуты спустя:

Да, и за поддержку калбеков для возможности заполнения их возможными значениями ))))

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/
Moool13
#7 2012-09-28 13:19

Имело бы смысл внедрить что то вроде этого: http://quasipartikel.at/multiselect_original/

Плюсую, это намного удобнее.

esclkm
#8 2012-09-28 18:12

категорически против - скриптовых вариантов - только стандартные элементы

littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
Macik
#9 2012-09-29 07:21

 

По «юзабилити» вот какие мысли:

1. Если говорить о jQueryUI multiselect, то обратите внимание на более свежую версию: http://quasipartikel.at/multiselect/index.html (которая работает с UI версией 1.8.x)

2. Есть еще пара плагинов вариантов:  
http://www.erichynds.com/jquery/jquery-ui-multiselect-widget/
http://labs.abeautifulsite.net/archived/jquery-multiSelect/demo/

преимущество последнего (хоть и выглядит он убого) в том, что он зависит только от jQuery и не надо тащить за собой jQueryUI. (это я к тому если тащить ткие штуки «в коробку»).

По расширению функционала

Но! Если говорить о том, что стоит добавлять чеклистбокс и мультиселект в коробку, то на мой взгляд, стоит это сделать только в виде обычных элементов. И никакого навешивания на них всяких jQuery и прочих UI плагинов! 
И объясню почему:
Во-первых, это может «утяжелить» коробку дополнительными библиотеками.
Во-вторых, у каждого свои вкусы и задачи по оптимизации UI (кому-то, например, в своем проекте jQueryUI противопоказан).
В-третьих не забываем, что в Котонти есть опции отключения Ajax и jQuery и базовые элементы должны уметь работать без них.

Если уж хочется сделать красиво из коробки, то (imho) надо, как и писал выше, в «ядро» включить элементы с базовой функциональностью, и сделать плагин-расшитрение для UI, типа моего, который будет на этот элемент навышивать UI. Тогда, кому надо смогут безболезненно вырезать это UI не потеряв функционала (да и без jQuery работать сможет).

(в общем ESClkm меня опередил :) )
https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
esclkm
#10 2012-09-29 18:53

а как идет вывод значиений???

littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
Macik
#11 2012-09-29 20:43

Это вопрос ко мне? Не совсем понимаю о каких значениях речь.

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
esclkm
#12 2012-09-30 11:14

как идет протом вывод данной мульти имнпута : $cfg['configname'] =?

littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
Macik
#13 2012-09-30 18:33

[если я правильно понял вопрос, то…]

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

varname=01:text:default_list:selected_items:Description

default_list - это список всех доступных значений (разделенный запятыми)
selected_items - это список выбранных значений (разделенный запятыми)

Таким образом (в моей реализации) $cfg['configname'] содержит список (выбранных) значений разделенный запятыми.

-----

Изначально, я вообще хотел сделать этот механизм с минимальным внутренним кодом. Т.е. в идеале была мысль сделать все это просто навесив jQuery код (без хуков вообще).

Но это не получилось, т.к. система при выводе конфиг-таблицы нигде не выводит дефолтные значения переменных. Поэтому пришлось «лезть» в хук admin.config.edit.loop. Потом еще пришлось admin.config.edit.first запользовать для фильтрации дублей из «simplelist».

За то «simple list» работает и без jQuery.

p.s. Сейчас понимаю, что можно было сделать проще: в admin.config.edit.loop - сделать только вывод скрытого поля со списком дефолтных значений переменной ($row['config_variants']), а далее дело техники и jQuery.

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
This post was edited by Macik (2012-09-30 20:11, 11 years ago)