Поле «Конструктор списков»

+27
2.57K
Иллюстрация
Позволяет создавать списки и мультисписки с различными вариантами отображения в форме добавления и фильтре — список, мультисписок, чекбоксы, радиокнопки. Позволяет реализовывать фильтрацию по принципу ИЛИ.

Поле «Конструктор списков» позволяет строить поля-списки с любым типом поведения в фильтре и форме добавления/редактирования контента и при просмотре записи/списка записей. Это могут быть радиокнопки, чекбоксы или любые доступные сейчас в системе варианты списков. Поле имеет единых формат хранения данных для всех видов списков поэтому типы полей взаимозаменяемы. Поле имеет две модели поведения в фильтре, которые позволяют осуществлять как строгий поиск(точное вхождение всех выбранных параметров), так и искать записи, имеющие одно или более выбранное фильтре значение.

+3
Алексей Т Алексей Т 5 лет назад #
Однозначно в закладки для покупки. Гибко и понятно.+ разработчику. Спасибо что развиваете проект такими расширениями.
+1
Сергей Сергей 5 лет назад #
Универсальность это огромный плюс instantcms, а с полями от dwd теперь можно разгуляться laugh
0
elv elv 5 лет назад #
Осталось только сделать конвертор из Свойств в Поля . Мне не надо, руками перенесу ))
0
Сергей Сергей 5 лет назад #
По существу, поле работает отменно, все заявленные функции выполняет. Не надо голову ломать как грамотно отфильтровать контент. Мне конструктор понравился.
+2
Денис Васильевич Денис Васильевич 5 лет назад #
Мне конструктор понравился.
Значит надо написать отзыв: https://instantcms.ru/addons/reviews/788
0
Сергей Сергей 5 лет назад #
Обязательно laugh
0
Anselmo Anselmo 5 лет назад #
Нечто похоже Вы уже выкладывали /blogs/kladovka-kodera/pole-spisok-s-dobavleniem-znachenii.html
Но тут похоже функционал пошире, но также присутствует и функционал из предыдущей разаботки
0
Вежливый Хам Вежливый Хам 5 лет назад #
Окей. Фильтры получается хорошими.
А как ведет себя юрл при использовании списка?
Всё те же кракозябры с знаком вопроса?
+2
&$!#% &$!#% 5 лет назад #
Ну это системное, выводить "кракозябры с знаком вопроса" при фильтрации по любым полям, при чем здесь это поле? Кстати, у dwd есть компонент "ЧПУ для фильтров". Только не говорите ему, что я рассказал))

Спойлер
0
Shuma Shuma 5 лет назад #
А возможно ли доработать конструктор, чтобы можно было использовать его в профилях пользователей? Попробовал его в профилях, отображается все норм, но при нажатии на taglink ничего
0
Shuma Shuma 5 лет назад #
Все заработало, разобрался
0
Region67 Region67 4 года назад #
Заметил один, существенный для меня минус - невозможно в админке создать фильтр с данным полем. Есть возможность исправить?
И ещё: меняю плейсхолдер в фильтре, но в мобильной версии отображается стандартное, с компа всё ок
+2
dwd dwd 4 года назад #
Да, все плохо. Все очень плохо!!!))) Устал развечивать мифы, но вот вам очередная порция:
Как видите ничего из вами озвученного не подтвердилось))
0
Region67 Region67 4 года назад #
Плейсхолдер не отображается именно с мобильного, с пк всё работает.
За решение первого вопроса огромное спасибо.
+2
dwd dwd 4 года назад #
Ну так это уже не ко мне, это к разработчикам библиотеки jquery-chosen, которая используется в Инстанте. На мобильных устройствах списки имеюн совершенно другой вид нежели в десктопном варианте.
0
Region67 Region67 4 года назад #
Спасибо за разъяснения. Для меня это всё тёмный лес. smile
0
Сергей Сергей 4 года назад #
Вопрос по обновлению полей «Конструктор списков» и «Список с добавлением значения» можно архивы установить по верх установленных ранее. А то у меня возникли сомнения в актуальности установленных полей на данный момент, довольно давно это было?
+1
dwd dwd 4 года назад #
Да, можно ставить поверх.
0
Region67 Region67 4 года назад #
Подскажите пожалуйста, где я снова накосячил: есть поле -конструктор списка в типе контента, в фильтрации не участвует. Ставлю галочку показывать в фильтре - выдаёт ошибку при сохранении.
+2
dwd dwd 4 года назад #
Собственно об ошибке - ошибка возникает из-за того, что MySQL может индексировать только первые N символов столбца BLOB или TEXT. Таким образом, ошибка в основном возникает, когда есть тип поля / столбца TEXT или BLOB, или они принадлежат к типам TEXT или BLOB, таким как TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT и LONGTEXT, которые вы пытаетесь создать первичный ключ или индекс. С полным BLOB или TEXT без значения длины MySQL не может гарантировать уникальность столбца, поскольку он имеет переменный и динамический размер. Таким образом, при использовании типов BLOB или TEXT в качестве индекса необходимо указать значение N, чтобы MySQL мог определить длину ключа. Однако MySQL не поддерживает ограничение длины ключа для TEXT или BLOB. ТЕКСТ (88) просто не работает.

Ошибка также появится, когда вы попытаетесь преобразовать столбец таблицы из не-ТЕКСТОВОГО и не-BLOB-типа, такого как VARCHAR и ENUM, в тип TEXT или BLOB, когда столбец уже определен как уникальные ограничения или индекс. Команда Alter Table SQL завершится ошибкой.

Решение проблемы состоит в том, чтобы удалить столбец TEXT или BLOB из индекса или ограничения уникальности или установить другое поле в качестве первичного ключа. Если вы не можете этого сделать и хотите установить ограничение на столбец TEXT или BLOB, попробуйте использовать тип VARCHAR и установите для него ограничение длины. По умолчанию, VARCHAR ограничен максимум 255 символами, и его предел должен быть указан неявно в скобках сразу после его объявления, то есть VARCHAR (200) ограничит его длиной только 200 символов.

Иногда, даже если вы не используете в своей таблице тип, связанный с TEXT или BLOB, также может появиться ошибка 1170. Это происходит в такой ситуации, когда вы указываете столбец VARCHAR в качестве первичного ключа, но ошибочно устанавливаете его длину или размер символов. VARCHAR может принимать только до 256 символов, поэтому что-либо вроде VARCHAR (512) заставит MySQL автоматически преобразовать VARCHAR (512) в тип данных SMALLTEXT, что впоследствии завершится ошибкой 1170 по длине ключа, если столбец используется как первичный. ключевой или уникальный или неуникальный индекс. Чтобы решить эту проблему, укажите значение меньше 256 в качестве размера поля VARCHAR.

Применительно к вашей ситуации - как вы наверное уже догадались поле использует для хранения данных столбец типа TEXT. И данная ошибка никак с самим полем не связана. Вы могли столкнуться точно с такой же ситуацией используя поля Текст, Текст HTML, Список: мультивыбор и любые другие поля, использующие для хранения данных столбцы типа TEXT. При включении показа в фильтре система пытается создать индекс таблицы для увеличения быстродействия при фильтрации. И очевидно в коде системы, отвечающем за создание индекса данная ситуация не учтена. Я думаю вашему вопросу самое место на гитхабе. Я несколько раз сталкивался с подобной ситуацией(с абсолютно разными полями), однако понять природу ее возникновения у меня не получилось. Впрочем и цели докопаться до истины не было, проще было удалить поле и создать его заново. Ошибка в этом случае исчезала и ломать голову не было нужды.

Как вы можете повлиять на ситуацию?
1. Вы можете удалить и создать поле заново(если данные данного поля пока отсутствуют либо не важны)
2. Вы можете запретить создание индекса для данного типа поля. Для этого вам необходимо открыть файл system/fields/unilist.php, найти в нем строку
Код PHP:
  1. public $allow_index = true;
и заменить ее на
Код PHP:
  1. public $allow_index = false;
По желанию - после того как поставите нужную вам галочку "Показывать в фильтре"можно опять вернуть true на место.
+1
Region67 Region67 4 года назад #
Спасибо большое, второй пункт помог!
Олег Васильевич я Олег Васильевич я 4 года назад #
Комментарий удален
0
iton iton 1 год назад #

Версия InstantCMS 2.15.2.
Проблема, если значение не выбрано, то показывается слово «Нет».
Изображение

Может кто то решил эту проблему или знает как ее устранить? чтобы если значение не выбрано то и не показывалось поле.


p.s. такая же проблема была с полем «Список мультивыбор» из коробки instantcms.ru/forum/znachenie-net-v-pole-spisok-multivybor.html но ее убрали в версии 2.15.2.

Изображение

+2
&$!#% &$!#% 1 год назад #

Файл system/fields/unilist.php, найдите

  1. if (!$value) { return LANG_NO; }

и замените на 

  1. if (!$value) { return ''; }

Точно так же можно сделать и в других полях, которые вас интересуют.

0
iton iton 1 год назад #

Спасибо!

+1
iton iton 1 год назад #

Ответ, что надо сделать:

Файл system/fields/unilist.php, найдите

  1. if (!$value) { return LANG_NO; }

и замените на 

  1. if (!$value) { return ''; }

Точно так же можно сделать и в других полях, которые вас интересуют.

p.s. т.к. «Комментарий удален».

+1
Region67 Region67 1 год назад #

Сегодня Александр выпустил обновление, где можно спрятать поле, если оно не выбрано.

Или использовать код выше

Изображение

0
iton iton 1 год назад #

Отлично!

Еще от автора

Компонент «Продажа полей» для ICMS 2
Компонент для тотального управления продажей полей. Возможна оплата показа пользователями и самим автором. Масса типов продажи полей.
Компонент «Мотивация пользователей» для ICMS 2
Компонент предназначен для поощрения пользователей за систематическое посещение сайта.
Поле «Поддерживаю!» для ICMS 2
Поле «Поддерживаю!» предназначено для сбора голосов в решении какой-то задачи.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.