Функция cot_implode_messages в Cotonti

Функция выполняет сбор сообщений, которые были добавлены в систему, и формирует один HTML-строковый вывод, который может быть использован на странице для отображения сообщений.

Функция cot_implode_messages выполняет сбор сообщений, которые были добавлены в систему, и формирует один HTML-строковый вывод, который может быть использован на странице для отображения сообщений.

/**
 * Collects all messages and implodes them into a single string
 * @param string $src Origin of the target messages
 * @param string $class Group messages of selected class only. Empty to group all
 * @return string Composite HTML string
 * @see cot_error()
 * @see cot_get_messages()
 * @see cot_message()
 */
function cot_implode_messages($src = 'default', $class = '')
{
    global $R, $L, $error_string, $sys;
    $res = '';

    if(empty($_SESSION['cot_messages'][Cot::$sys['site_id']])) return '';
    if (!is_array($_SESSION['cot_messages'][Cot::$sys['site_id']])) return '';

    $messages = cot_get_messages($src, $class);
    foreach ($messages as $msg) {
        $text = isset(Cot::$L[$msg['text']]) ? Cot::$L[$msg['text']] : $msg['text'];
        $res .= cot_rc('code_msg_line', array('class' => $msg['class'], 'text' => $text));
    }

    if (!empty($error_string) && (empty($class) || $class == 'error')) {
        $res .= cot_rc('code_msg_line', array('class' => 'error', 'text' => $error_string));
    }

    return empty($res) ? '' : cot_rc('code_msg_begin', array('class' => empty($class) ? 'message' : $class))
        . $res . Cot::$R['code_msg_end'];
}

Параметры функции:


1. $src (string) — Источник сообщений.

Если не указан, будут выбраны сообщения из всех источников.


2. $class (string) — Класс сообщений,

которые нужно сгруппировать. Если не указано, сгруппируются все сообщения.


Алгоритм работы функции:

Проверка на наличие сообщений:

Функция сначала проверяет, есть ли сохраненные сообщения в сессии, с учетом текущего идентификатора сайта Cot::$sys['site_id']. Если сообщений нет, функция сразу возвращает пустую строку.


Получение сообщений:

Функция вызывает cot_get_messages($src, $class), чтобы получить список сообщений для указанного источника и/или класса. Если параметры не указаны, будут получены все сообщения.


Формирование строки с сообщениями:

Для каждого сообщения из полученного списка, текст сообщения извлекается из массива Cot::$L (локализованные строки) или напрямую из текста сообщения, если локализованной версии нет.
Каждое сообщение добавляется в строку, используя функцию cot_rc('code_msg_line', ...), которая может сгенерировать HTML-код для вывода одного сообщения с указанным классом и текстом.
Если есть строка ошибки, сохраненная в $error_string, она также добавляется к результату (если не указан класс или класс равен 'error').


Формирование окончательной строки:

Если в процессе были собраны сообщения, то возвращается строка, которая состоит из заголовка и обертки для сообщений. Это делается с помощью функции cot_rc('code_msg_begin', ...), которая добавляет начало для блока сообщений, и с помощью функции Cot::$R['code_msg_end'], которая добавляет конец блока.

Возвращаемое значение:

Функция возвращает строку, содержащую HTML-вывод для отображения сообщений. Если сообщений нет, возвращается пустая строка.

Роль функции:

cot_implode_messages используется для агрегации сообщений об ошибках, предупреждениях и успешных действиях, собранных системой, и их вывода в одном месте на странице. Она комбинирует все нужные сообщения в единую HTML-строку, что позволяет в дальнейшем удобно вывести их на страницах сайта.


Разберем пример функции в штатном функционале котонти и попробуем понять что здесь происходит

$msgSeparate = isset(Cot::$cfg['msg_separate']) ? Cot::$cfg['msg_separate'] : false;
$error = $msgSeparate ? cot_implode_messages($name, 'error') : '';


Давайте разберем этот пример:

Пояснение шаг за шагом:

Переменная $msgSeparate:

В первой строке идет проверка, существует ли в конфигурации фреймворка параметр msg_separate (в массиве Cot::$cfg).
Если параметр существует и имеет значение, то это значение присваивается переменной $msgSeparate.
Если параметр не существует, переменной $msgSeparate присваивается значение false.

Результат:

Если Cot::$cfg['msg_separate'] установлен (например, в конфигурации фреймворка есть такой параметр), то $msgSeparate будет иметь значение, равное этому параметру.

Если параметр не существует, то $msgSeparate будет равно false.

Переменная $error:

Далее, на основе значения переменной $msgSeparate происходит выбор, следует ли собирать сообщения об ошибках с помощью функции cot_implode_messages.

Если $msgSeparate равно true (то есть, конфигурация позволяет отдельно выводить ошибки), то вызывается функция

cot_implode_messages($name, 'error')

которая собирает все ошибки для указанного источника $name и класса 'error'.
Функция cot_implode_messages вернет строку HTML с ошибками.

Если же $msgSeparate равно false, то переменной $error присваивается пустая строка.


Роль и цель применения:

$msgSeparate: Управляет тем, нужно ли отдельно собирать и выводить сообщения об ошибках. Это может быть полезно, если в конфигурации сайта есть настройка, которая позволяет разделять ошибки от других типов сообщений (например, предупреждений или успешных сообщений).

$error: В случае, если сообщения об ошибках должны выводиться отдельно (когда $msgSeparate истинно), эта переменная будет содержать HTML-разметку с ошибками. Если же ошибки не нужно выводить отдельно, то переменная останется пустой.


Применение:

Этот код может быть полезен, например, в случаях, когда в админке или на странице настроек нужно контролировать, как будут отображаться сообщения об ошибках: отдельно или вместе с другими типами сообщений. В зависимости от настройки в конфигурации, сообщения об ошибках могут быть собраны и отформатированы для вывода.

Пример использования в контексте кода:

Если в конфигурации сайта включена настройка msg_separate (например, true), то система будет использовать cot_implode_messages для формирования HTML-сообщений об ошибках.
Если msg_separate отключена или не настроена, ошибки не будут отображаться с помощью этой функции, и $error останется пустой строкой.
Таким образом, это решение управляет выводом сообщений об ошибках в зависимости от конфигурации.

 

4 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 22.01.2025 11:33
  • Последнее обновление: 22.01.2025 11:33