diff --git a/fields/single_line_numeric_one/field.php b/fields/single_line_numeric_one/field.php index 9f5d5a2..c78740f 100644 --- a/fields/single_line_numeric_one/field.php +++ b/fields/single_line_numeric_one/field.php @@ -4,7 +4,7 @@ * AVE.cms * * @package AVE.cms - * @version 3.x + * @version 4.x * @filesource * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru * @@ -39,38 +39,10 @@ break; case 'doc': - if ($tpl_empty) - { - $field_value = clean_php($field_value); - } - else - { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - } - - $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': + // Если значение пустое, возвращаем пустую строку, чтобы не выводить шаблон с тегами + if (trim($field_value) === '') return ''; + if ($tpl_empty) { $field_value = clean_php($field_value); @@ -82,19 +54,21 @@ '/\[tag:parametr:(\d+)\]/i', function($data) use($field_param) { - return $field_param[(int)$data[1]]; + // ПРОВЕРКА: Берем индекс и проверяем его наличие в массиве параметров + $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) { $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); $AVE_Template->assign('field_default', $default); + $AVE_Template->assign('field_value', $field_value); return $AVE_Template->fetch($tpl_file); } @@ -103,6 +77,7 @@ break; case 'save': + // Оставляем только цифры и точку $field_value = preg_replace('/[^\d.]/','',$field_value); return $field_value; diff --git a/fields/single_line_numeric_three/field.php b/fields/single_line_numeric_three/field.php index 9087a73..df9bcda 100644 --- a/fields/single_line_numeric_three/field.php +++ b/fields/single_line_numeric_three/field.php @@ -4,7 +4,7 @@ * AVE.cms * * @package AVE.cms - * @version 3.x + * @version 4.x * @filesource * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru * @@ -16,7 +16,7 @@ { global $AVE_Template; - $fld_dir = dirname(__FILE__) . '/'; // Убрал невидимый пробел + $fld_dir = dirname(__FILE__) . '/'; $tpl_dir = $fld_dir . 'tpl/'; $fld_name = basename($fld_dir); @@ -29,16 +29,11 @@ switch ($action) { case 'edit': - - // Инициализируем $field_value как массив с 3-мя пустыми строками по умолчанию. $safe_values = ['', '', '']; if (! empty($field_value)) { - // Если значение не пусто, разделяем его на элементы $values = explode('|', $field_value); - - // Гарантируем, что массив содержит минимум 3 элемента, используя безопасный доступ (?? '') $safe_values = [ $values[0] ?? '', $values[1] ?? '', @@ -48,7 +43,7 @@ $AVE_Template->assign('field_dir', $fld_name); $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $safe_values); // Присваиваем гарантированный массив + $AVE_Template->assign('field_value', $safe_values); $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); @@ -56,46 +51,13 @@ break; case 'doc': - - if ($tpl_empty) - { - $value = array(); - - if (! empty($field_value)) - { - $value = array_diff(explode('|', $field_value), array('')); - $value = array_map('clean_php', $value); - } - } - else - { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_value', $value); - return $AVE_Template->fetch($tpl_file); - } - - return $field_value; - break; - case 'req': + // Защита: если в базе пусто, не выводим ничего (чтобы не светить пустой шаблон) + if (trim($field_value) === '') return ''; + if ($tpl_empty) { $value = array(); - if (! empty($field_value)) { $value = explode('|', $field_value); @@ -103,22 +65,25 @@ } } else - { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - } + { + $field_param = explode('|', $field_value); + $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) { + $AVE_Template->assign('field_id', $field_id); $AVE_Template->assign('field_value', $value); return $AVE_Template->fetch($tpl_file); } @@ -127,23 +92,20 @@ break; case 'save': - // Обрабатываем массив из трех значений, очищаем и собираем в строку '|' $save = array(); - if (is_array($field_value)) { - // Очищаем каждое из трех значений и сохраняем $value_0 = preg_replace('/[^\d.]/','', $field_value[0] ?? ''); - $value_1 = preg_replace('/[^\d.]/','', $field_value[1] ?? ''); - $value_2 = preg_replace('/[^\d.]/','', $field_value[2] ?? ''); - $save = [$value_0, $value_1, $value_2]; + $value_1 = preg_replace('/[^\d.]/','', $field_value[1] ?? ''); + $value_2 = preg_replace('/[^\d.]/','', $field_value[2] ?? ''); + $save = [$value_0, $value_1, $value_2]; + } + elseif (!empty($field_value)) { + $save[] = preg_replace('/[^\d.]/','', $field_value); } - elseif (!empty($field_value)) { - // Если не массив, но не пусто, сохраняем как есть (для совместимости) - $save[] = preg_replace('/[^\d.]/','', $field_value); - } return empty($save) ? '' : implode('|', $save); + break; case 'api': if (! empty($field_value)) diff --git a/fields/single_line_numeric_two/field.php b/fields/single_line_numeric_two/field.php index 062a6d0..6023d55 100644 --- a/fields/single_line_numeric_two/field.php +++ b/fields/single_line_numeric_two/field.php @@ -4,7 +4,7 @@ * AVE.cms * * @package AVE.cms - * @version 3.x + * @version 4.x * @filesource * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru * @@ -29,16 +29,11 @@ switch ($action) { case 'edit': - - // Инициализируем $field_value как массив с 2-мя пустыми строками по умолчанию. $safe_values = ['', '']; if (! empty($field_value)) { - // Если значение не пусто, разделяем его на элементы $values = explode('|', $field_value); - - // Гарантируем, что массив содержит минимум 2 элемента, используя безопасный доступ $safe_values = [ $values[0] ?? '', $values[1] ?? '' @@ -47,7 +42,7 @@ $AVE_Template->assign('field_dir', $fld_name); $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $safe_values); // Присваиваем гарантированный массив + $AVE_Template->assign('field_value', $safe_values); $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); @@ -55,69 +50,40 @@ break; case 'doc': - - if ($tpl_empty) - { - $value = array(); - - if (! empty($field_value)) - { - $value = array_diff(explode('|', $field_value), array('')); - $value = array_map('clean_php', $value); - } - } - else - { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_value', $value); - return $AVE_Template->fetch($tpl_file); - } - - return $field_value; - break; - case 'req': + // Если значение поля совсем пустое — ничего не выводим (защита от пустого шаблона) + if (trim($field_value) === '') return ''; + if ($tpl_empty) { $value = array(); - if (! empty($field_value)) { + // Для режима без шаблона отдаем массив очищенных значений $value = explode('|', $field_value); $value = array_map('clean_php', $value); } } else - { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - } + { + $field_param = explode('|', $field_value); + $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) { + $AVE_Template->assign('field_id', $field_id); $AVE_Template->assign('field_value', $value); return $AVE_Template->fetch($tpl_file); } @@ -126,22 +92,20 @@ break; case 'save': - // Обрабатываем массив из двух значений, очищаем и собираем в строку '|' $save = array(); - if (is_array($field_value)) { - // Очищаем каждое из двух значений и сохраняем $value_0 = preg_replace('/[^\d.]/','', $field_value[0] ?? ''); - $value_1 = preg_replace('/[^\d.]/','', $field_value[1] ?? ''); - $save = [$value_0, $value_1]; + $value_1 = preg_replace('/[^\d.]/','', $field_value[1] ?? ''); + $save = [$value_0, $value_1]; + } + elseif (!empty($field_value)) + { + $save[] = preg_replace('/[^\d.]/','', $field_value); } - // Если пришла не строка, но не массив, возвращаем то, что есть (для совместимости) - elseif (!empty($field_value)) { - $save[] = preg_replace('/[^\d.]/','', $field_value); - } return empty($save) ? '' : implode('|', $save); + break; case 'api': if (! empty($field_value))