В общем почти со всем разобрался, по порядку:
Добавляем поле вот так:
{include
file="common/form_file_uploader.tpl"
existing_pairs=(($page_data.main_pair) ? [$page_data.main_pair] : []) + $page_data.image_pairs|default:[]
file_name="file"
image_pair_types=['N' => 'myimg_add_additional_image', 'M' => 'myimg_main_image', 'A' => 'myimg_additional_image']
allow_update_files=!$is_shared_myimg && $allow_update_files|default:true
}
В функции обновления добавляем это:
// Update main image
fn_attach_image_pairs('myimg_main', 'myimg', $page_id, $lang_code);
// Update additional images
fn_attach_image_pairs('myimg_additional', 'myimg', $page_id, $lang_code);
// Add new additional images
fn_attach_image_pairs('myimg_add_additional', 'myimg', $page_id, $lang_code);
// Remove images
if (isset($page_data['removed_image_pair_ids'])) {
$page_data['removed_image_pair_ids'] = array_filter($page_data['removed_image_pair_ids']);
}
if (!empty($page_data['removed_image_pair_ids'])) {
fn_delete_image_pairs($page_id, 'myimg', '', $page_data['removed_image_pair_ids']);
}
/**
* Re-attach one of the additional myimg images as the main one when myimg has no main image.
* This case can occur when creating or updating a myimg programmatically via API.
*/
$main_image = fn_get_image_pairs($page_id, 'myimg', 'M', true, true, $lang_code);
$additional_images = fn_get_image_pairs($page_id, 'myimg', 'A', true, true, $lang_code);
$main_image_candidate = reset($additional_images);
if (!$main_image && $main_image_candidate) {
$pairs_data = [
$main_image_candidate['pair_id'] => [
'detailed_alt' => '',
'type' => 'M',
'object_id' => 0,
'pair_id' => $main_image_candidate['pair_id'],
'position' => 0,
'is_new' => YesNo::NO,
],
];
fn_update_image_pairs([], [], $pairs_data, $page_id, 'myimg', [], true, $lang_code);
в функции удаления вот так:
fn_delete_image_pairs($page_id, 'myimg');
в функции get вот так (в аргументах ещё добавляем $get_main_pair = true, $get_add_pairs = true):
// Get additional image pairs
if ($get_add_pairs == true) {
$page_data['image_pairs'] = fn_get_image_pairs($page_data['page_id'], 'myimg', 'A', true, true, $lang_code);
}
// Get main image pair
if ($get_main_pair == true) {
$page_data['main_pair'] = fn_get_image_pairs($page_data['page_id'], 'myimg', 'M', true, true, $lang_code);
В этом случае работает добавление картинок, как при создании, так и при обновлении. При удалении записи картинки удаляются из базы, но при каждом действии страница ругается:
И ещё, если удалить одну картинку или две, ну то есть уже в созданной записи, то удаление не происходит при сохранении записи. И такое же предупреждение об уходе со странице.
Подскажите что делать?