Форумы / National / Russian / Тех. поддержка / Как вывести сообщение cot_error после отправки формы?

Виктор
#1 02.09.2020 06:52

Как вывести сообщение cot_error после отправки формы?

в общем есть плагин test (добавляет к модулю форму)

test.module - файл (по хуку модуля) с тегами и шаблоном для вывода формы

test - файл (standalone) - обработчик формы

после отправки формы идем в обработчик test

if ($act == 'add')
    {
        $r = array();

        $r['test'] = cot_import('text', 'P', 'TXT'); 

cot_check(empty($r['test']), 'Нет текста'); 
         
        ........

 cot_redirect(cot_url('modules', $param, '', true));

если ошибка то редирект обратно на страницу, как здесь вывести ошибку?

 

jCube Group
#2 02.09.2020 15:56

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

Сделал группу в телеге https://t.me/Cotonti_help если что помогу с вопросами.
Виктор
#3 02.09.2020 16:12
#45067 jCube Group:

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

не нашел

сейчас пробую отловить, на каком то этапе эти сообщения хранятся в $_SESSION, но после полного обновления страницы массив пустой

 [cot_messages] => Array
        (
        )

попробую их как то перехватить

 

 

Додано 2 години потому:

не работает, может разработчики что подскажут, единственное что пришло - добавить к сесии если ошибка

    $_SESSION['cot_alert_messages'] = "error";

и уже в файле  обработать

if (!empty($_SESSION['cot_alert_messages']))
{
    $rv_msg = cot_custom_alert('error', $_SESSION['cot_alert_messages']);
    unset($_SESSION['cot_alert_messages']);
}

можно доработать все это доработать к функции, и добавить например вывод с помощью toastr

function cot_custom_alert($type, $message) {
    switch ($type)
    {
        case "info":
            return "<script> toastr.info('" . $message . "'); </script>";
            break;
        
.....

 

Додано 12 годин потому:

UPD

насколько я понял, почему сообщения не выводятся, если по хуку модуля подключены еще плагины, и перед загрузкой плагина test загружается другой и в нeм присутствует cot_display_messages($t); то функция cot_clear_messages(); удаляет массив с сообщениями в  $_SESSION['cot_messages'][$sys['site_id']] и далее  соответственно в плагине  test нечего выводить или вернее вывод делается на первом подключаемом плагине как у меня на отдельной вкаладке что не есть гуд

в моем случае (так как пдключены к модулю две формы и плюс комментарии) нужно вывод сообщений прописать в модуле сразу после обьявления шаблона cot_display_messages($t); перед хуком подключаемых плагинов и прописать в нужном месте шаблона модуля вывод {FILE "{PHP.cfg.themes_dir}/{PHP.cfg.defaulttheme}/warnings.tpl"}, следовательно в плагинах cot_display_messages($t) можно удалить, теперь все сообщения будут выводится в нужном месте

Думаю вопрос решен!

Отредактировано: Виктор (03.09.2020 07:25, 3 года назад)
jCube Group
#4 04.09.2020 08:00

cot_display_messages($t);  и покажет и очистит все сообщения,  а до этого нужно записать в сообщения, cot_message('сообщение'). но смотрите примеры в коде.

Сделал группу в телеге https://t.me/Cotonti_help если что помогу с вопросами.
Виктор
#5 04.09.2020 10:21
#45069 jCube Group:

cot_display_messages($t);  и покажет и очистит все сообщения,  а до этого нужно записать в сообщения, cot_message('сообщение'). но смотрите примеры в коде.

да, я разобрался, по идее все описано в https://www.cotonti.com/ru/docs/devel/validation_messages   , но теперь разобравшись как проходят все сообщения, как создаются, как проверяются, выводятся и удаляются, теперь проще работать с ними.

для вывода например на определенных страницах можно подключить вывод с помощю toastr

для этого создал в functions.custom фунцию, практически та же что  cot_display_messages, только вывод через toastr, вывода:

пример

function cot_custom_display_messages($tpl, $block = 'MAIN')
{
	global $L;
	
if (!cot_check_messages())
	{
		return;
	}
	$block = (!empty($block)) ? $block.'.' : '';
	
        $errors = cot_get_messages('', 'error');
	
if (count($errors) > 0)
	{
		foreach ($errors as $msg)
		{
			$text = isset($L[$msg['text']]) ? $L[$msg['text']] : $msg['text'];
			$tpl->assign('TEST', cot_custom_alert('error', $text));
			$tpl->parse($block.'TEST_ROW');
		}
	
	}
   .................................
	
        cot_clear_messages();
}

в шаблоне (не подключаю шаблон а через тег)

 <!-- BEGIN: TEST_ROW -->{TEST}<!-- END: TEST_ROW -->  

и cot_custom_alert, пример выше в теме