Функция cot_clear_messages в Cotonti

Функция cot_clear_messages() используется в контексте фреймворка Cotonti для очистки сообщений об ошибках или других уведомлений после того, как они были показаны пользователю.


Подробное объяснение кода:
 


/**
 * Clears error and other messages after they have bin displayed
 * @param string $src If non-emtpy, clear messages in this specific source only
 * @param string $class If non-empty, clear messages of this specific class only
 * @see cot_error()
 * @see cot_message()
 */
function cot_clear_messages($src = '', $class = '')
{
    global $error_string, $sys;

    if (empty($src) && empty($class)) {
        unset($_SESSION['cot_messages'][Cot::$sys['site_id']]);
        unset($error_string);
    }

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

    if (!is_array($_SESSION['cot_messages'][Cot::$sys['site_id']]) || (!empty($src) && !is_array($_SESSION['cot_messages'][Cot::$sys['site_id']][$src]))) {
        return;
    }

    if (empty($src)) {
        foreach ($_SESSION['cot_messages'][Cot::$sys['site_id']] as $src => $grp) {
            $new_grp = array();
            foreach ($grp as $msg){
                if ($msg['class'] != $class) {
                    $new_grp[] = $msg;
                }
            }
            if (count($new_grp) > 0) {
                $_SESSION['cot_messages'][Cot::$sys['site_id']][$src] = $new_grp;

            } else {
                unset($_SESSION['cot_messages'][Cot::$sys['site_id']][$src]);
            }
        }

    } elseif (empty($class)) {
        unset($_SESSION['cot_messages'][Cot::$sys['site_id']][$src]);

    } else {
        $new_grp = array();
        foreach ($_SESSION['cot_messages'][Cot::$sys['site_id']][$src] as $msg) {
            if ($msg['class'] != $class) {
                $new_grp[] = $msg;
            }
        }
        if (count($new_grp) > 0) {
            $_SESSION['cot_messages'][Cot::$sys['site_id']][$src] = $new_grp;

        } else {
            unset($_SESSION['cot_messages'][Cot::$sys['site_id']][$src]);
        }
    }
}

Эта функция cot_clear_messages предназначена для очистки сообщений об ошибках и других сообщений после их отображения.

Рассмотрим её детально:

Параметры:
$src (string): Если указано, очищает сообщения только из указанного источника.
$class (string): Если указано, очищает сообщения только указанного класса.


Описание работы:


Очистка всех сообщений:

if (empty($src) && empty($class)) {
    unset($_SESSION['cot_messages'][Cot::$sys['site_id']]);
    unset($error_string);
}

Если параметры $src и $class не заданы, удаляются все сообщения для текущего сайта (Cot::$sys['site_id']).
Также очищается глобальная переменная $error_string, если она используется для хранения ошибок.
Проверка наличия сообщений:

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


Если для текущего сайта нет сообщений, функция завершает выполнение.
Обработка сообщений по источнику или классу:

Если $src пусто, функция проходит по всем источникам и фильтрует сообщения, сохраняя только те, которые не принадлежат указанному классу $class.
Если $class пусто, удаляются все сообщения из указанного источника $src.
Если заданы оба параметра, фильтруются сообщения указанного источника, оставляя только те, которые не принадлежат указанному классу.


Логика фильтрации:


Фильтрация по классу сообщений:

foreach ($grp as $msg){
    if ($msg['class'] != $class) {
        $new_grp[] = $msg;
    }
}


Сообщения, которые не соответствуют указанному классу, добавляются в новый массив $new_grp.


Очистка пустых групп:

if (count($new_grp) > 0) {
    $_SESSION['cot_messages'][Cot::$sys['site_id']][$src] = $new_grp;
} else {
    unset($_SESSION['cot_messages'][Cot::$sys['site_id']][$src]);
}


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

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

// Очистка всех сообщений:
cot_clear_messages();

 

//  Очистка сообщений только из источника 'profile':
cot_clear_messages('profile');

 

// Очистка сообщений класса 'error' из всех источников:
cot_clear_messages('', 'error');

 

 


Параметры:
$src — указывает на источник сообщений. Если параметр не пуст, функция будет очищать сообщения только из указанного источника (например, 'default', 'admin' и т.д.).
$class — указывает на класс сообщений (например, "error", "success", и т.п.). Если не пусто, функция будет очищать только сообщения с данным классом.


Описание работы функции:
Проверка и очистка всех сообщений:


 

if (empty($src) && empty($class)) {
    unset($_SESSION['cot_messages'][Cot::$sys['site_id']]);
    unset($error_string);
}


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

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

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



Если в сессии нет сообщений для текущего сайта, функция сразу завершает выполнение.

Проверка на массив сообщений и наличие сообщений по заданному источнику:


if (!is_array($_SESSION['cot_messages'][Cot::$sys['site_id']]) ||
    (!empty($src) && !is_array($_SESSION['cot_messages'][Cot::$sys['site_id']][$src]))) {
    return;
}

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

Удаление сообщений по классу:

Если источник не указан (empty($src)), функция проходит по всем источникам сообщений, удаляя те, которые соответствуют заданному классу:


foreach ($_SESSION['cot_messages'][Cot::$sys['site_id']] as $src => $grp) {
    $new_grp = array();
    foreach ($grp as $msg) {
        if ($msg['class'] != $class) {
            $new_grp[] = $msg;
        }
    }
    if (count($new_grp) > 0) {
        $_SESSION['cot_messages'][Cot::$sys['site_id']][$src] = $new_grp;
    } else {
        unset($_SESSION['cot_messages'][Cot::$sys['site_id']][$src]);
    }
}


Сообщения, не соответствующие классу, сохраняются, а соответствующие — удаляются. Если в источнике не осталось сообщений, этот источник удаляется.

Удаление сообщений для определённого источника (если класс не задан):

unset($_SESSION['cot_messages'][Cot::$sys['site_id']][$src]);


 


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

Удаление сообщений по классу для конкретного источника:


foreach ($_SESSION['cot_messages'][Cot::$sys['site_id']][$src] as $msg) {
    if ($msg['class'] != $class) {
        $new_grp[] = $msg;
    }
}
if (count($new_grp) > 0) {
    $_SESSION['cot_messages'][Cot::$sys['site_id']][$src] = $new_grp;
} else {
    unset($_SESSION['cot_messages'][Cot::$sys['site_id']][$src]);
}

Если указан источник и класс, функция будет удалять сообщения с данным классом, оставляя только те, что не соответствуют классу. Если после удаления сообщений источник оказывается пустым, он будет удалён.


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

cot_clear_messages('default', 'error');  // Очистка ошибок из источника 'default'
cot_clear_messages('admin');             // Очистка всех сообщений из источника 'admin'
cot_clear_messages();                    // Очистка всех сообщений


Итог:
Функция cot_clear_messages() позволяет эффективно управлять и очищать сообщения, которые были отправлены пользователю, тем самым предотвращая их повторное отображение и освобождая память.

5 minutes read Administrator

Comments (0)

No comments yet
Only registered users can post new comments

Content author

Administrator

Offline

Administrator

Last logged: 2026-07-21 00:03

  • Page published: 2025-01-22 01:51
  • Last update: 2025-01-22 09:06