From 5d82db218cb6c2d8ee46cdaaba7ad45cea539b4b Mon Sep 17 00:00:00 2001 From: Repellent Date: Fri, 19 Dec 2025 21:28:06 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B2=20=D0=BE=D0=B1=D1=89=D0=B5=D0=BC=20?= =?UTF-8?q?=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=B5=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=A2=D0=B5=D0=B3=D0=B8=20=D1=80=D0=B0=D0=B7=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D0=B5=D0=BD=D0=BE=20=D0=B8=D1=81=D0=BF=D0=BE=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D1=81=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BC=D0=BD=D1=8B=D0=B9=20=D1=82=D0=B5=D0=B3=20[tag:para?= =?UTF-8?q?metr:-1]=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B9=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B2=D0=B5=D0=B4=D0=B5=D1=82=20=D1=81=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D1=83=20=D0=B2=D1=81=D0=B5=20=D1=82=D0=B5=D0=B3=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0.=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=B6=D0=B4=D1=8B=D0=B9=20=D1=82=D0=B5=D0=B3=20=D0=BE?= =?UTF-8?q?=D0=B1=D0=B5=D1=80=D0=BD=D1=83=D1=82=20=D0=B2=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fields/tags/field.php | 79 +++++++++++++------------------------------ 1 file changed, 23 insertions(+), 56 deletions(-) diff --git a/fields/tags/field.php b/fields/tags/field.php index 12ab8d0..7796410 100644 --- a/fields/tags/field.php +++ b/fields/tags/field.php @@ -59,20 +59,20 @@ array_push($field_tags, $row); // Преобразуем сохраненные теги в массив - $field_value = explode('|', $field_value); - $field_value = array_diff($field_value, array('')); + $field_value_arr = explode('|', $field_value); + $field_value_arr = array_diff($field_value_arr, array('')); - $field_tags_combined = array_unique(array_merge($field_tags, $field_value)); + $field_tags_combined = array_unique(array_merge($field_tags, $field_value_arr)); $total = count($field_tags_combined); $field_points = array(ceil($total/4), 2*ceil($total/4), 3*ceil($total/4)); $AVE_Template->assign('field_points', $field_points); - $AVE_Template->assign('field_tags', $field_tags_combined); // Используем объединенный список + $AVE_Template->assign('field_tags', $field_tags_combined); $AVE_Template->assign('field_dir', $fld_name); $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); + $AVE_Template->assign('field_value', $field_value_arr); $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); @@ -80,20 +80,29 @@ break; case 'doc': - + case 'req': $AVE_Template->config_load($lang_file, 'public'); + // Подготовка массива активных тегов (очистка и сброс индексов) + $field_param = explode('|', $field_value); + $field_param = array_values(array_diff($field_param, array(''))); + if ($tpl_empty) { - $field_value = explode('|', $field_value); - $field_value = array_diff($field_value, array('')); - $field_value = array_values($field_value); + $field_value = $field_param; } else { - $field_param = explode('|', $field_value); - $field_param = array_diff($field_param, array('')); - $field_param = array_values($field_param); + // 1. Обработка универсального тега [-1] для вывода всего списка сразу + if (strpos($tpl, '[tag:parametr:-1]') !== false) { + $all_tags_html = ''; + foreach ($field_param as $tag_item) { + $all_tags_html .= '' . $tag_item . ' '; + } + $tpl = str_replace('[tag:parametr:-1]', $all_tags_html, $tpl); + } + + // 2. Обработка точечных тегов [0], [1] и т.д. с защитой от ошибок PHP 8 $field_value = preg_replace_callback( '/\[tag:parametr:(\d+)\]/i', function ($data) use ($field_param) @@ -105,47 +114,7 @@ ); } - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_default', $default); - $AVE_Template->assign('field_value', $field_value); - - return $AVE_Template->fetch($tpl_file); - } - - return $field_value; - break; - - case 'req': - - $AVE_Template->config_load($lang_file, 'public'); - - if ($tpl_empty) - { - $field_value = explode('|', $field_value); - $field_value = array_diff($field_value, array('')); - $field_value = array_values($field_value); - } - else - { - $field_param = explode('|', $field_value); - $field_param = array_diff($field_param, array('')); - $field_param = array_values($field_param); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - $index = (int)$data[1]; - return isset($field_param[$index]) ? $field_param[$index] : ''; - }, - $tpl - ); - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl); + $tpl_file = get_field_tpl($tpl_dir, $field_id, $action, $_tpl); if ($tpl_empty && $tpl_file) { @@ -222,7 +191,7 @@ } } -if (! function_exists('afterTagsSave')) + if (! function_exists('afterTagsSave')) { function afterTagsSave ($data) { @@ -234,7 +203,6 @@ if (! function_exists('afterTagsSave')) $AVE_Document = new AVE_Document(); } - // Безопасное получение ID $document_id = isset($data['document_id']) ? (int)$data['document_id'] : 0; $rubric_id = isset($data['rubric_id']) ? (int)$data['rubric_id'] : 0; @@ -287,7 +255,6 @@ if (! function_exists('afterTagsSave')) $used_tags_str = "'" . implode("','", $used_tags_array) . "'"; $where_clause = "tag NOT IN ({$used_tags_str})"; } else { - // Если список используемых тегов пуст, удаляем ВСЕ теги рубрики (полная очистка) $where_clause = "1"; }