Не сохраняются сторонние поля в версии 2.14.0

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 2 декабря 2020 в 11:31
Не сохраняются поля в Типах контента
Ошибка в запросе БД: '.cms_con__cats' не существует
Таблица '.cms_con__cats' не существует
SELECT i.*
FROM cms_con__cats i
WHERE (i.parent_id > '0')
ORDER BY i.ns_left
Последние вызовы:

cmsModel->get() @ /system/core/model.php: 340
cmsModel->getCategoriesTree() @ /system/controllers/catfields/hooks/ctype_field_form.php: 28
onCatfieldsCtypeFieldForm->{closure}() @ /system/core/formfield.php: 619
cmsFormField->getListItems() @ /system/fields/list.php: 64
fieldList->getRules() @ /system/core/form.php: 860
cmsForm->validate() @ /system/controllers/admin/actions/ctypes_fields_edit.php: 64
actionAdminCtypesFieldsEdit->run() @ /system/core/controller.php: 582
cmsController->runExternalAction() @ /system/core/action.php: 37
cmsAction->__call() @ /system/controllers/admin/actions/ctypes.php: 11
actionAdminCtypes->run() @ /system/core/controller.php: 582
cmsController->runExternalAction() @ /system/core/controller.php: 453
На 2,14 не сохраняются поля в Типах контента с: Категории для полей, Поле join, Поле с добавлением значений.
Появилась настройка: Показывать в записи -Позиция в записи — В теле записи

В новом созданном Типе контента:
В "Автор" Видимость поля — Показывать в записи
Warning: htmlentities() expects parameter 1 to be string, array given in /system/libs/html.helper.php on line 10

Поле join мультивыбор не работает, Слайдер owl — на модерне
При создании записи галочка в поле уехала
#2 2 декабря 2020 в 11:46
Обновите ваши поля/компоненты до актуальной версии.
#3 2 декабря 2020 в 11:53
С Категории для полей v1-1-3 работает нормально, с v1-2-0 нет на 2.13.1, под 2.14 нет еще по идее. Поле join нет в каталоге )
Может можно заменить файлики чтобы была предварительная фильтрация хотя бы?
#4 2 декабря 2020 в 12:07
Вы как всегда в своём репертуаре laugh
#5 2 декабря 2020 в 12:15
Было бы удобно файлики позаменять отдельных обновлений… ~ два года собирал сайт, потом ~ 1 года отдыхал, вышло обновление с плюшками… И если сейчас доживают до пенсии — все может получится.
Fuze, Tolya спасибо за добрые слова.
#6 2 декабря 2020 в 12:16

В "Автор" Видимость поля — Показывать в записи
Warning: htmlentities() expects parameter 1 to be string, array given in /system/libs/html.helper.php on line 10

@noname
Решение

/system/controllers/catfields/

@noname
Вероятно, нужно спросить у автора этого компонента.
#7 3 декабря 2020 в 10:53
Не сохраняются любые поля. Зачем Вы поменяли название темы ?
PS еще компонент, связанный с категориями Рубрикатор+ v2, но на 2,13,1 работало. Были проблемы на 2,13,1 в полях с символами ")", на 2,14 отключение сторонних полей не помогает. PHP 7.2-7.4 с ошибкой. В консоли POST site/admin/ctypes/fields_edit/23/5 503
#8 4 декабря 2020 в 12:01
Добрый. Автор Категорий для полей подшаманил компонент, спасибо ему человеческое, но остался вопрос и может быть у кого-нибудь будут идеи что делать ...
Тема с "Указано недопустимое значение" /forum/thread21301-1.html
+ ошибки
Сверху Поле: Описание: Warning: Illegal offset type in isset or empty in/system/core/controller.php on line 1275
Поле Дата публикации: Показывать в записи
Warning: htmlentities() expects parameter 1 to be string, array given in/system/libs/html.helper.php on line 10

При выборе нескольких категорий в типах контента, подгружаются свойства от всех выбранных категорий. Так же и выводятся потом на странице;
Виджет "Фильтр контента" теперь также поддерживает предварительную фильтрацию после выбора каждой из опций фильтра;
В виджете "Список контента" теперь можно указывать какие поля будут выводиться (включая категорию), для включенных полей можно задавать их опции;
Виджет "Слайдер контента" теперь выводит и категорию;

Выбор дополнительных категорий в типах контента теперь на стандартном поле, учитывайте это в своих дополнениях;
Изменения поля
#9 4 декабря 2020 в 14:25
@noname, ужесточена проверка данных. Теперь нельзя подсунуть в форму значения, которых нет в предустановленных значениях списка. Правильно реализован алгоритм или нет спорить не буду, но это лишает разработчиков целого ряда возможностей. И именно отсюда данная проблема. Если вы заметили, то в последней версии компонента данных полей нет, эта возможность из компонента убрана. Решить данный вопрос можно только изобретая костыли. Если я не прав и кто-то знает опцию, отвечающую за валидацию значений, поправьте
Даю рецепт:
1. создаем в папке system/fields файл с именем cfdslist.php и содержимым
  1. <?php
  2.  
  3. class fieldCfdslist extends fieldList {
  4.  
  5. public $title = 'Список без валидации ключей';
  6.  
  7. public function validate_array_key($array, $value){
  8. return true;
  9. }
  10.  
  11.  
  12. }
2. Идем в папку templates/default/assets/fields, делаем копию файла list.tpl.php и переименовываем ее в cfdslist.tpl.php
3. открываем файл хука system/controllers/catfields/hooks/ctype_item_form.php, находим в нем сроку
  1. new fieldList('options:catsitem', array(
и заменяем на
  1. new fieldCfdslist('options:catsitem', array(
P.S. Если это сообщение попадется на глаза Fuze, то позволю себе внести рационализаторское предложение — добавить спискам опцию $validate_vals = true;(аналогично ряду опций типа $multiple, $dynamic_list и т.д.), отключение которой выключало бы строгую валидацию значений. Тогда не приходилось бы изобретать костыли.
#10 4 декабря 2020 в 14:42

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

dwd
И это правильно. Сервер не должен ожидать данных, кроме указанных в списке — мы же из доступного списка выбираем.

отключение которой выключало бы строгую валидацию значений. Тогда не приходилось бы изобретать костыли.

dwd
Отключать валидацию тоже не правильно. И изобретать костыли не нужно. Достаточно привести поля списка, которые грузятся по ajax (о них ведь речь) по аналогии, как сделано например в опциях виджета "Список контента".
У меня у самого в том же instantvideo поломалось часть опций, но что поделать.

Warning: htmlentities() expects parameter 1 to be string, array given in/system/libs/html.helper.php on line 10

@noname
Отвечал выше

#11 4 декабря 2020 в 14:58
Fuze, нет желания спорить. У вас как всегда все просто. Замечу лишь что

И это правильно. Сервер не должен ожидать данных, кроме указанных в списке — мы же из доступного списка выбираем.

Ни разу это не правильно. Кто из нас программист? Я или сервер? Кому из нас виднее какие данные я хочу отправить и как их обработать?
В массовом использовании, во фронтэнде это бесспорно нужно. Но когда дело касается админки, когда я сознательно использую такой способ передачи данных зачем мне это ни разу не нужное бесплатное приложение?))
#12 4 декабря 2020 в 15:20
Чтобы ситуация была более понятна и мое предложение не казалось пустой прихотью попробую обосновать.

1. имеем некий абсолютно неважно какой js-скрипт, генерирующий массив titles
2. имеем поле типа "Список", которое выводится в форме чекбоксами
Задача: добавить в каждому чекбоксу строковое поле с соотвествующим данному полю текстом из массива titles

Мое решение данной задачи состоит из 3 строк кода.

  1. $.each($('#options_catsitem input[type=checkbox]'), function(index, checkbox){
  2. title = $(this).val()] == null ? '' : titles[$(this).val()];
  3. $(this).closest('label').append('<input type="text" class="catsinput" name="options[catsitem][titles][' + $(this).val() + ']" value="' + title + '"/>');
  4. });
И возможно это только благодаря отсутствию строгой валидации. С валидацией же такой номер не пройдет и объем кода для реализации задачи вырастет не в десять, а в десятки раз. Это частный случай, но таких случаем может быть множество. И если я сознательно хочу отключить валидацию в данном конкретном случае и имею возможность это сделать, то что в этом плохого?
#13 4 декабря 2020 в 17:01
dwd, ок, добавлю флаг отключения валидации в свойство поля.
#14 4 декабря 2020 в 17:09

ок, добавлю флаг отключения валидации в свойство поля.

Fuze
Можно ли обращаться к свойства поля из файла формы?
Например
  1. new fieldList('test', array(
  2. 'title' => 'test',
  3. 'validate_vals' => false
  4. )),
#15 4 декабря 2020 в 17:52
Fuze, благодарю!

Evanescence, да, можно будет так задавать этот параметр. Ни и после создания формы тоже:
  1. $form->setFieldProperty($fieldset_id, $field_name, 'validate_vals', false)
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.