в общем шаблоне поля Теги разрешено испоьзовать системный тег [tag:parametr:-1] который выведет сразу все теги документа. каждый тег обернут в <span class="ave-tag">

This commit is contained in:
2025-12-19 21:28:06 +05:00
parent 85fe32eaea
commit 5d82db218c

View File

@@ -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 .= '<span class="ave-tag">' . $tag_item . '</span> ';
}
$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";
}