Функция 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() в данном примере помогает принять решение, продолжать ли выполнение операции обновления страницы или перенаправить пользователя обратно для исправления ошибок. Это предотвращает отправку пользователя на страницу с результатами, если в процессе возникли ошибки.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 22.01.2025 10:53
- Последнее обновление: 22.01.2025 10:53