Comments (5)
По хайлоад-блокам лучше к @ASGAlex, он делал интеграцию с ними.
from digitalwand.admin_helper.
Поправил виджет сам. CheckFields для CUserTypeDateTime не может принимать массив, когда множественное значение. Плюс не надо запускать для этого класса modifyValueBeforeSave
if (is_callable(array($className, 'CheckFields'))) {
if (!is_array($value)) {
$arrValue = array($value);
}
else {
$arrValue = $value;
}
foreach ($arrValue as $checkValue) {
$errors = $className::CheckFields($fieldInfo, $checkValue);
if (!empty($errors)) {
$this->addError($errors);
return;
}
}
}
// use save modifiers
$field = $entity_data_class::getEntity()->getField($this->getCode());
if ($fieldInfo['USER_TYPE']['CLASS_NAME'] != 'CUserTypeDateTime') $value = $field->modifyValueBeforeSave($value, $data);
from digitalwand.admin_helper.
У меня устранение $value = $field->modifyValueBeforeSave($value, $data);
не решает проблему: при сохранении множественной даты с полем без значения всё равно выскакивает ошибка. $value и в том и в другом случае будет array(0 => "")
, ошибка появится.
from digitalwand.admin_helper.
для этого выше идёт foreach
для перебора массива. И ещё, я выставил в настройках HL ИБ семь обязательных полей, так и в function fields()
прописал у них 'REQUIRED' => true
, но при сохранение ошибка пишится только для трёх полей, и если их заполнить, то ошибок больше не возникает, а если повтроно редактировать элемент, то можно даже стереть информацию в этих полях и сохранить, и ошибок не возникнет. Нет ошибок для Привязка к разделам инф. блоков и привязка к пользователю и список. Правда так же происходит при создании эдемента в маом HL ИБ
from digitalwand.admin_helper.
в итоге немного исправленный метод processEditAction в HLIBlockFieldWidget выглядит у меня так.
public function processEditAction() {
/** @var \CAllUserTypeManager $USER_FIELD_MANAGER */
global $USER_FIELD_MANAGER;
$iblockId = 'HLBLOCK_' . $this->getHLId();
//Чтобы не терялись старые данные
if (!isset($this->data[$this->getCode()]) AND isset($_REQUEST[$this->getCode() . '_old_id'])) {
$this->data[$this->getCode()] = $_REQUEST[$this->getCode() . '_old_id'];
}
//Функция работает для всех полей, так что запускаем её только один раз, результат кешируем.
static $data = array();
if (empty($data)) {
$data = $this->data;
$USER_FIELD_MANAGER->EditFormAddFields($iblockId, $data);
}
$value = $data[$this->getCode()];
$entity_data_class = AdminBaseHelper::getHLEntity($this->getSettings('MODEL'));
$oldData = $this->getOldFieldData($entity_data_class);
$fieldsInfo = $USER_FIELD_MANAGER->getUserFieldsWithReadyData($iblockId, $oldData, LANGUAGE_ID, false, 'ID');
$fieldInfo = $fieldsInfo[$this->getCode()];
$className = $fieldInfo['USER_TYPE']['CLASS_NAME'];
if (is_callable(array($className, 'CheckFields'))) {
if (!is_array($value)) {
$arrValue = array($value);
}
else {
$arrValue = $value;
}
foreach ($arrValue as $checkValue) {
$errors = $className::CheckFields($fieldInfo, $checkValue);
if (!empty($errors)) {
$this->addError($errors);
return;
}
}
}
// use save modifiers
$field = $entity_data_class::getEntity()->getField($this->getCode());
//hack для множественных значений Дата и Дата со временем
if ($fieldInfo['USER_TYPE']['CLASS_NAME'] != 'CUserTypeDateTime' && $fieldInfo['USER_TYPE']['CLASS_NAME'] != 'CUserTypeDate') $value = $field->modifyValueBeforeSave($value, $data);
//Типоспецифичные хаки
if ($unserialized = unserialize($value)) {
//Список значений прилетает сериализованным
$this->data[$this->getCode()] = $unserialized;
}
else if ($className == 'CUserTypeFile' AND ! is_array($value)) {
//Если не сделать intval, то при сохранении с ранее добавленным файлом будет выскакивать ошибка
$this->data[$this->getCode()] = intval($value);
}
else {
//Все остальные поля - сохраняем как есть.
$this->data[$this->getCode()] = $value;
}
}
from digitalwand.admin_helper.
Related Issues (20)
- ORMElementWidget в Multiple режиме
- Некорректная ссылка выбора элемента в OrmElementWidget в Multiple режиме HOT 3
- Не проходит валидация OrmElementWidget в режиме Multiple
- Поддержка новых гридов админки
- Не удаляются связанные записи при использовании виджетов в множественном режиме
- Не отображается название элемента в виджете IblockElementWidget
- Merge last work to master, please HOT 1
- Удаление нескольких записей HOT 1
- Сохранение при создании
- Только страница списка HOT 1
- Пакет является брошенным, не используйте его! HOT 2
- А работают ли вообще множественные файлы?
- Виджет для N:M HOT 1
- Виджет "Дата\время" не проверяет пустое ли значение
- Проект еще поддерживается? HOT 5
- Выбранный порядок сортировки сбрасывается после перехода в раздел HOT 1
- Виджет не может изменить список полей для выборки в GetList
- Вопрос о создании взаимосвязанных полей при редактировании элемента
- При смешанном отображении разделов/элементов нельзя выбрать элементы внутри раздела
- Ошибка удаления в списке HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from digitalwand.admin_helper.