CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Модуль почтовой рассылки пользователям сайта
Официальный форум Eleanor CMS » Для вебмастеров и владельцев сайтов » Комната программистов
Страницы: 1, 2
Loader
Почти готов этот модуль, но есть пара нюансов.
Во-первых не могу победить встроенную функцию отправки писем, как ни бился, пишет ошибку "поля не заполнены", хотя всё вроде введено и передано куда надо. Кто знает, подскажите чего ей не хватает!
Во-вторых, после завершения отправки выводится экран, типа что всё отправлено, всё хорошо, НО! Нужно как-то сделать чтобы при повторном обращении (перезагрузке страницы) выбрасывало опять на редактор, иначе получится повтор отправки всех писем, что нехорошо (спам :blink: ). Это у меня тоже не получается!

Всё выглядит следующим образом:

Первая страница:



Логинимся, попадаем в редактор:



Заполняем поля, далее эта ошибка!:



И если бы ошибки не было, то:



При обновлении этой страницы должно выбрасывать в редактор, иначе повторно всё отправит! Это не получается!

sanes
Что это за модуль? Не помню, есть ли в rc5 такой..
Jon
Кстати очень нужный модуль.
Loader
Цитата (sanes @ 2021-08-06 00:50)
Что это за модуль? Не помню, есть ли в rc5 такой..

Теперь есть! :D

P.S. Ещё желательно вывести прогресс отправки, но кроме как через echo ничего на ум не приходит :mellow:
sanes
Цитата (Loader @ 2021-08-06 00:50)
Теперь есть!
где?
Loader
Цитата (sanes @ 2021-08-06 00:50)
где?

В аттаче...ты чего? Неадекватный какой-то...
sanes
Loader, А попроще можешь быть? У меня под рукой нет RC5. Я хотел узнать, это доп. модуль или ты про El. 1.0? В EL 1.0 по памяти это дело уже есть.
Loader
Цитата (sanes @ 2021-08-06 00:50)
У меня под рукой нет RC5. Я хотел узнать, это доп. модуль или ты про El. 1.0

Вот оно что, ясно.
Да, это дополнительный модуль для RC5.
Loader
Цитата (Loader @ 2021-08-06 00:50)
Во-первых не могу победить встроенную функцию отправки писем, как ни бился, пишет ошибку "поля не заполнены", хотя всё вроде введено и передано куда надо. Кто знает, подскажите чего ей не хватает!

Это я победил, дело за малым! :)
Остался второй вопрос и ещё нужно как-то вывести прогресс выполнения, или хотя-бя значок ожидания во время выполнения цикла отправки! HELP!!!
Alexander
Цитата (Loader @ 2021-08-06 00:50)
Нужно как-то сделать чтобы при повторном обращении (перезагрузке страницы) выбрасывало опять на редактор, иначе получится повтор отправки всех писем, что нехорошо (спам ). Это у меня не получается

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

Цитата (Loader @ 2021-08-06 00:50)
...и ещё нужно как-то вывести прогресс выполнения (через javascript ?), или хотя-бя значок ожидания во время выполнения цикла отправки! HELP!!!

Тут, я так понимаю совсем нет ничего сложного. Заведите где-то картинку и показывайте ее сразу после того, как форма отправлена.
Loader
Цитата (Alexander @ 2021-08-06 00:50)
Тут, я так понимаю совсем нет ничего сложного. Заведите где-то картинку и показывайте ее сразу после того, как форма отправлена.

Насколько я знаю, в Элеаноре есть встроенная функция показа значка загрузки. Хотелось бы использовать именно её.
А как дело обстоит с отображением прогресса? Это реально сделать?
Цитата (Alexander @ 2021-08-06 00:50)
Самая простая и самая надежная защита от повторного POST запроса - это внедрить в состав POST запроса некоторый "маркер", который ставить при попадании на страницу с формой и обнулять при отправке этой формы. Это может быть кука или сессия. Выбирайте, что Вам больше по душе.

Тут моих знаний пока не достаточно. Можно подробнее (с примерами :))?
Alexander
Цитата (Loader @ 2021-08-06 00:50)
Насколько я знаю, в Элеаноре есть встроенная функция показа значка загрузки. Хотелось бы использовать именно её.

ShowLoading и HideLoading для RC5. И CORE.ShowLoading И CORE.HideLoading для 1.0

Цитата (Loader @ 2021-08-06 00:50)
А как дело обстоит с отображением прогресса? Это реально сделать?

Нет. Сделать не реально. Потому что браузер посылает запрос на сервер. А когда придет ответ (и придет ли вообще) - это знать невозможно. Пример: ты когда общаешься с кем-то в аське ведь не знаешь, когда точно (через сколько секунд) тебе ответит твой собеседник :)

Цитата (Loader @ 2021-08-06 00:50)
Можно подробнее (с примерами )?

Разумеется. При заходе на страницу (не POST запрос), генерируем какую-то уникальную строку. Это можно сделать при помощи uniqid(). Дальше записываем эту строку в куку пользователю + в hidden элемент формы. После отправки формы (POST запрос) - читаем строку из куки и тут же удаляем куку. Дальше сравниваем строку из hidden формы со строкой, полученной из формы: если они совпадают, осуществляем отправку.
Loader
Цитата (Alexander @ 2021-08-06 00:50)
ShowLoading и HideLoading для RC5. И CORE.ShowLoading И CORE.HideLoading для 1.0

А синтаксис вызова какой?

<?php

ShowLoading; - так не работает!

Mainclass->ShowLoading; - так тоже!

?>


Цитата (Alexander @ 2021-08-06 00:50)
Разумеется. При заходе на страницу (не POST запрос), генерируем какую-то уникальную строку. Это можно сделать при помощи uniqid(). Дальше записываем эту строку в куку пользователю + в hidden элемент формы. После отправки формы (POST запрос) - читаем строку из куки и тут же удаляем куку. Дальше сравниваем строку из hidden формы со строкой, полученной из формы: если они совпадают, осуществляем отправку.

Это слишком заморочено... вот если бы пример кода! :rolleyes:
Alexander
ShowLoad() и HideLoad()

Пример кода, будет, наверное завтра.
Loader
Цитата (Alexander @ 2021-08-06 00:50)
ShowLoad() и HideLoad()

Alexander ,
Fatal error: Call to undefined function ShowLoad() in /var/www/pdaki192/data/www/pda-kino.net.ru/modules/notifications/index.php on line 81
Цитата (Alexander @ 2021-08-06 00:50)
Пример кода, будет, наверное завтра.

ОК !
Loader
Цитата (Alexander @ 2021-08-06 00:50)
Это может быть кука или сессия. Выбирайте, что Вам больше по душе.

Про сессию, если можно, пример? :rolleyes:
Alexander
Loader, это JS функции, а не PHP.

Простой пример кода.
При показе формы:

$u=uniqid();
$Mainclass->SCookie('se-form',$u);
$cotnent.='... Код формы'.Template::Control('security','hidden',$u).'...Код формы...';


При отправке:

$cu=$Mainclass->GCookie('se-form');
$pu=isset($_POST['security']) ? ($_POST['security'] : false;
if($pu and $pu==$cu)
{
$Mainclass->SCookie('se-form',false);
//Можно отправлять.
}
$cotnent.='... Код формы'.Template::Control('security','hidden',$u).'...Код формы...';


Вот самый простой, надежный и примитивный вариант. Перед использованием кода, его необходимо понять.
Loader
Цитата (Alexander @ 2021-08-06 00:50)
Loader, это JS функции, а не PHP.


Да я понял, как её вызвать-то??? :blink:

Цитата (Alexander @ 2021-08-06 00:50)
Вот самый простой, надежный и примитивный вариант. Перед использованием кода, его необходимо понять.


Так я же про сессию просил а не про куки!
Если можно про сессию пример? Этот я понял и усвоил!

P.S. Всё работает как часики! Спасибо, Александр!
Alexander
Цитата (Loader @ 2021-08-06 00:50)
Да я понял, как её вызвать-то???

Дык. В JS Файле:
ShowLoad();

А потом где-нибудь
HideLoad():


Цитата (Loader @ 2021-08-06 00:50)
Если можно про сессию пример?

Ну а что, с сессией. С сессиея вообще все просто. Стартуете сессию. Далее, перед показом формы, ставите какой-то флаг
$_SESSION['sent']=false;


В момент отправки проверяете:
$_SESSION['sent']=true;


А после отправки этот флаг ставите в true.
Loader
Цитата (Alexander @ 2021-08-06 00:50)
Дык. В JS Файле:


Вот именно, что в JS Файле! А как из php-файла вызвать?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.