Функция cot_error и cot_error_found в Cotonti

Разберем две функции cot_error и cot_error_found в Cotonti так как они часто применяются в контексте одного сценария или одного документа.

Разберем две функции cot_error и cot_error_found в Cotonti так как они часто применяются в контексте одного сценария или одного документа.

 

Первая функция cot_error

/**
 * Records an error message to be displayed on results page
 *
 * @global int $cot_error Global error counter
 * @param string $message Message lang string code or full text
 * @param string $src Error source identifier, such as field name for invalid input
 * @see cot_message()
 */
function cot_error($message, $src = 'default')
{
    global $cot_error;
    $cot_error ? $cot_error++ : $cot_error = 1;
    cot_message($message, 'error', $src);
}

 

Вторая функия cot_error_found

/**
 * Checks if any errors have been previously detected during current script execution
 *
 * @global int $cot_error Global error counter
 * @global string $error_string Obsolete error message container string
 * @return bool TRUE if any errors were found, FALSE otherwise
 */
function cot_error_found()
{
    global $cot_error, $error_string;
    return (bool) $cot_error || !empty($error_string);
}

 

Первая функция: cot_error
Описание
Функция cot_error записывает сообщение об ошибке, которое будет отображено на странице с результатами. Она увеличивает счетчик ошибок и передает ошибку в систему сообщений для отображения.

Параметры
$message (string) — Сообщение об ошибке. Это может быть либо строка с кодом языка для сообщения, либо полный текст сообщения об ошибке.
$src (string) — Идентификатор источника ошибки. Это может быть название поля ввода (например, если пользователь ввел неправильные данные) или иной идентификатор, по которому можно отследить, откуда пришла ошибка. По умолчанию 'default'.
Алгоритм работы:
Глобальная переменная $cot_error: Это счетчик количества ошибок. Если переменная уже существует, она увеличивается на 1, иначе ей присваивается значение 1, что сигнализирует о первом появлении ошибки.

Вызов функции cot_message: Функция передает ошибку в систему сообщений с уровнем 'error' и указывает источник ошибки с помощью параметра $src.

Пояснение применению функции cot_error в следующем примере:
    

if (mb_strlen($rtopic['ft_title']) < Cot::$cfg['forums']['mintitlelength']) {
        cot_error('forums_titletooshort', 'rtopictitle');
    }

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

Вот как работает этот код:

Условие проверки:

if (mb_strlen($rtopic['ft_title']) < Cot::$cfg['forums']['mintitlelength'])

Это условие проверяет длину строки в переменной $rtopic['ft_title'] (заголовок темы форума). Если длина этого заголовка меньше, чем минимально установленная длина, заданная в конфигурации форума Cot::$cfg['forums']['mintitlelength'], то выполняется следующий блок кода — регистрация ошибки.

Вызов cot_error:

cot_error('forums_titletooshort', 'rtopictitle');

Внутри этого блока вызывается функция cot_error. Она принимает два параметра:

'forums_titletooshort': Это строка, которая указывает на ошибку, и, скорее всего, это идентификатор строки для перевода в файле языковых строк. В данном случае это сообщение об ошибке "Заголовок слишком короткий".

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

 

Роль функции cot_error в этом контексте:


Функция cot_error увеличивает счетчик ошибок $cot_error и затем вызывает функцию cot_message, которая обрабатывает сообщение об ошибке и сохраняет его для отображения на странице. В данном случае, сообщение об ошибке будет связано с полем "Заголовок темы" (с помощью идентификатора 'rtopictitle').

Когда ошибка зарегистрирована, она будет отображена в соответствующем месте на странице (например, рядом с полем ввода заголовка), если затем будет вызвана функция, которая отображает ошибки (например, cot_display_messages).

Итог:

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

 

Вторая функция: cot_error_found

Описание
Функция cot_error_found проверяет, были ли обнаружены ошибки в процессе выполнения текущего скрипта. Она возвращает true, если есть ошибки, или false, если ошибок нет.

Параметры
Нет параметров.


Алгоритм работы:


Глобальные переменные $cot_error и $error_string:

$cot_error: Счетчик ошибок. Если в системе ошибок зарегистрировано хотя бы одно сообщение, переменная будет содержать положительное число.
$error_string: Это строка, в которой хранится ошибка (если она была записана как строка, а не через структуру сообщений).
Функция возвращает true, если:

Существует хотя бы одна ошибка в глобальной переменной $cot_error (это означает, что ошибка была зарегистрирована).
Либо строка $error_string не пуста (что означает, что ошибка была записана в эту строку).
Если ни одно из этих условий не выполняется, функция возвращает false.

Назначение функции cot_error_found:

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

Таким образом, первая функция cot_error отвечает за запись ошибок в систему, а вторая функция cot_error_found проверяет, были ли ошибки в процессе работы скрипта.

Вот пример из кода движка котонти, где применяется функция cot_error_found(), а именно при редактировании страницы модуля Pages.

    if (!cot_error_found()) {
        cot_page_update($id, $rpage);

        switch ($rpage['page_state']) {
            case COT_PAGE_STATE_PUBLISHED:
                $r_url = cot_page_url($rpage, [], '', true);
                break;

            case COT_PAGE_STATE_PENDING:
                $r_url = cot_url('message', 'msg=300', '', true);
                break;

            case COT_PAGE_STATE_DRAFT:
                cot_message(Cot::$L['page_savedasdraft']);
                $r_url = cot_url('page', 'm=edit&id=' . $id, '', true);
                break;
        }
        cot_redirect($r_url);
    } else {
        cot_redirect(cot_url('page', "m=edit&id=$id", '', true));
    }


Что здесь происходит? как работает здесь функция cot_error_found() ?


В данном примере кода используется функция cot_error_found() для проверки, были ли обнаружены ошибки на текущем этапе выполнения скрипта. Давайте разберем это пошагово.

Разбор работы кода:
Проверка наличия ошибок:

if (!cot_error_found()) {

Здесь проверяется, есть ли ошибки, используя функцию cot_error_found(). Функция возвращает true, если были зарегистрированы ошибки, и false, если ошибок нет.

Когда cot_error_found() возвращает false (то есть ошибок нет):

Скрипт продолжает выполнение и вызывает функцию cot_page_update($id, $rpage), которая обновляет страницу с указанным id.
Обработка состояния страницы ($rpage['page_state']):

Далее, в зависимости от состояния страницы (значение $rpage['page_state']), выбирается URL для редиректа:


switch ($rpage['page_state']) {
    case COT_PAGE_STATE_PUBLISHED:
        $r_url = cot_page_url($rpage, [], '', true);
        break;

    case COT_PAGE_STATE_PENDING:
        $r_url = cot_url('message', 'msg=300', '', true);
        break;

    case COT_PAGE_STATE_DRAFT:
        cot_message(Cot::$L['page_savedasdraft']);
        $r_url = cot_url('page', 'm=edit&id=' . $id, '', true);
        break;
}


Если страница опубликована (COT_PAGE_STATE_PUBLISHED), создается URL для просмотра страницы.
Если страница ожидает публикации (COT_PAGE_STATE_PENDING), генерируется URL с сообщением о том, что страница ожидает публикации (сообщение с кодом 300).
Если страница сохранена как черновик (COT_PAGE_STATE_DRAFT), выводится сообщение о том, что страница была сохранена как черновик, и создается URL для редактирования страницы.


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

После того как URL выбран в зависимости от состояния страницы, происходит редирект:

cot_redirect($r_url);

Если были ошибки:


Если функция cot_error_found() вернула true (то есть ошибки были найдены), тогда выполняется следующий блок кода:

} else {
    cot_redirect(cot_url('page', "m=edit&id=$id", '', true));
}


 

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

Как работает cot_error_found() в этом контексте:

Основная роль функции cot_error_found() в этом фрагменте кода — это проверка, были ли ошибки на предыдущих этапах выполнения скрипта.

Если ошибок нет (то есть функция возвращает false), скрипт продолжает выполнение, обновляет страницу, выбирает правильный URL для редиректа в зависимости от состояния страницы и направляет пользователя на нужную страницу.

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

Резюме:

Функция cot_error_found() в данном примере помогает принять решение, продолжать ли выполнение операции обновления страницы или перенаправить пользователя обратно для исправления ошибок. Это предотвращает отправку пользователя на страницу с результатами, если в процессе возникли ошибки.

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

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

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

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

Administrator

Оффлайн

Administrator

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

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