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

This commit is contained in:
2025-12-04 12:32:48 +05:00
parent 667c7d3fed
commit 0e3b095b65
11 changed files with 65 additions and 35 deletions

View File

@@ -35,4 +35,5 @@
<ul class="messages">
<li class="highlight yellow">{#error#}</li>
</ul>
<input type="hidden" name="feld[{$field_id}]" value="" />
{/if}

View File

@@ -11,5 +11,5 @@
<ul class="messages">
<li class="highlight yellow">{#error#}</li>
</ul>
<input type="hidden" name="feld[{$field_id}]" value="" />
{/if}

View File

@@ -13,5 +13,5 @@
<ul class="messages">
<li class="highlight yellow">{#error#}</li>
</ul>
<input type="hidden" name="feld[{$field_id}]" value="" />
{/if}

View File

@@ -8,4 +8,5 @@
<ul class="messages">
<li class="highlight yellow">{#no_items#}</li>
</ul>
<input type="hidden" name="feld[{$field_id}]" value="">
{/if}

View File

@@ -9,4 +9,5 @@
<ul class="messages">
<li class="highlight yellow">{#no_items#}</li>
</ul>
<input type="hidden" name="feld[{$field_id}]" value="">
{/if}

View File

@@ -274,36 +274,41 @@
break;
case 'save':
// Инициализируем $field_value_new как пустой массив.
$field_value_new = [];
// Гарантируем, что $field_value является массивом перед foreach
$field_value = is_array($field_value) ? $field_value : [];
foreach ($field_value as $v)
{
if (! empty($v['url']))
{
// Убедимся, что данные очищены перед сериализацией
$description = $v['descr'] ? stripslashes(htmlspecialchars($v['descr'], ENT_QUOTES)) : '';
// Собираем элемент в строку: URL|DESCR
$field_value_new[] = $v['url'] . ($description ? '|' . $description : '');
}
}
case 'save':
// Инициализируем $field_value_new как пустой массив.
$field_value_new = [];
// Гарантируем, что $field_value является массивом перед foreach
$field_value = is_array($field_value) ? $field_value : [];
foreach ($field_value as $k => $v) // Добавлен $k для проверки заглушки
{
// Игнорируем элемент-заглушку
if ($k === '__empty__') {
continue;
}
// Если массив картинок пуст (все удалено), возвращаем пустую строку для сохранения в БД
if (empty($field_value_new))
{
return '';
}
else
{
// Если картинки есть, сериализуем массив строк и сохраняем
return @serialize($field_value_new);
}
break;
if (! empty($v['url']))
{
// Убедимся, что данные очищены перед сериализацией
$description = $v['descr'] ? stripslashes(htmlspecialchars($v['descr'], ENT_QUOTES)) : '';
// Собираем элемент в строку: URL|DESCR
$field_value_new[] = $v['url'] . ($description ? '|' . $description : '');
}
}
// Если массив картинок пуст (все удалено), возвращаем пустую строку для сохранения в БД
if (empty($field_value_new))
{
return '';
}
else
{
// Если картинки есть, сериализуем массив строк и сохраняем
return @serialize($field_value_new);
}
break;
case 'api':
if (empty($field_value))

View File

@@ -23,6 +23,7 @@
<div class="cascad" id="cascad_{$doc_id}_{$field_id}" data-id="{$field_id}" data-doc="{$doc_id}" data-rubric="{if isset($smarty.request.rubric_id)}{$smarty.request.rubric_id}{/if}">
<input type="hidden" value="" id="cascad__{$field_id}_{$doc_id}">
<input type="hidden" name="feld[{$field_id}][__empty__]" value="">
{if $show_upload}
<input type="file" class="cascade_upload cascade_upload_field_{$field_id}_{$doc_id}" multiple="multiple" name="cascade_files_{$field_id}_{$doc_id}[]" style="visibility: hidden; display: none;" data-max-files="{$max_files}" />
{/if}

View File

@@ -17,4 +17,5 @@
<ul class="messages">
<li class="highlight yellow">{#no_items#}</li>
</ul>
<input type="hidden" name="feld[{$field_id}]" value="" />
{/if}

View File

@@ -37,7 +37,6 @@
$items = array_diff($items, array(''));
// ✅ ИСПРАВЛЕНИЕ 1: Безопасная десериализация
if (!empty($field_value)) {
$field_value = @unserialize($field_value);
} else {
@@ -53,7 +52,7 @@
break;
case 'doc':
// ✅ ИСПРАВЛЕНИЕ 2: Безопасная десериализация (устранение unserialize error)
$items = (!empty($field_value))
? @unserialize($field_value)
: array();
@@ -155,13 +154,32 @@
break;
case 'api':
// ✅ ИСПРАВЛЕНИЕ 3: Безопасная десериализация
if (empty($field_value))
return $field_value;
return @unserialize($field_value);
break;
case 'save':
// Убираем заглушку, если она присутствует и нет других значений
if (isset($field_value) && is_array($field_value))
{
$field_value = array_diff($field_value, array('__EMPTY__'));
}
if (!empty($field_value) && is_array($field_value))
{
// Сериализуем выбранные значения
return @serialize($field_value);
}
else
{
// Если после удаления заглушки массив пуст, возвращаем пустую строку.
return '';
}
break;
case 'name':
return $AVE_Template->get_config_vars('name');
break;

View File

@@ -1,4 +1,5 @@
{if $items}
<input type="hidden" name="feld[{$field_id}][]" value="__EMPTY__" />
<select size="5" class="select" style="min-width: 300px; max-width: 600px;" multiple="multiple" name="feld[{$field_id}][]">
{foreach from=$items key=key item=item}
<option value="{$item|trim|escape}" {if in_array($item|trim|escape, $field_value)} selected="selected"{/if}>{$item}</option>
@@ -8,4 +9,5 @@
<ul class="messages">
<li class="highlight yellow">{#no_items#}</li>
</ul>
<input type="hidden" name="feld[{$field_id}][]" value="__EMPTY__" />
{/if}

View File

@@ -12,5 +12,5 @@
<ul class="messages">
<li class="highlight yellow">{#error#}</li>
</ul>
<input type="hidden" name="feld[{$field_id}]" value="" />
{/if}