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"; }