Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Модуль управления подписками и рассылками. Восстание машин.

25.02.2007, 00:25
CleanSupport
Cleansupport

Зарегистрирован:
2006-07-11
Сообщений: 2

Задача
Использовать стандартную подписку на рассылки CMS NetCat Extra 2.4 возможно только предварительно зарегистрировавшись и авторизовавшись, что весьма неудобно с точки подписчика.

Необходимо упростить интерфейс анонимной подписки, не испортив при этом её взаимодействие со всем остальным комплексом функционала NetCat. При подписке должны запрашиваться некоторые дополнительные поля.

Решение
При подписке анонимного пользователя, будем его автоматически регистрировать используя привязку по e-mail адресу, авторизовать и проводить редирект на страницу подписки.

Реализация
Для начала сделаем свою форму регистрации, в которой попросим пользователя ввести необходимые нам поля (не забудем внести их в системные таблицы). В условиях добавления пользователя сделаем подстановку в логин e-mail адреса и генерацию паролей, а после успешного добавления – автоматическую авторизацию и переход на страницу подписки.

Модуль подписки вызывается в файле require/index.php, используя при этом переменную $INCLUDE_FOLDER, определяемую в конфигурационном файле vars.inc.php. Подменяем её, вызывая свой файл из отдельно созданного каталога (линкуем в тот же каталог несколько вызываемых файликов s_*.php), в котором вместо формы авторизации выводим нашу форму регистрации.

Итог
Решение не изменяет ядра NetCat за исключением конфигурационного файла vars.inc.php
25.02.2007, 23:31
Гость
Гость

Это очень интересно. Распишите подробнее и многие будут вам очень благодарны - надеюсь решение внесут в базу знаний.
26.02.2007, 14:38
h/z

Зарегистрирован:
2007-02-06
Сообщений: 755

попробуйте другой рецепт
создайте новый шаблон с полями
1) имя
2) емайл
3) тип подписки (например только на новости, или только на статьи)

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

шаблон "Подписка на новости"
Альтернативная форма добавления объекта:
Код:

<form name=adminForm method=post action=/netcat/add.php><input name=cc type=hidden value=НУЖНЫЙ_НОМЕР_ШАБЛОНА_В_РАЗДЕЛЕ><input name=sub type=hidden value=НУЖНЫЙ_НОМЕР_РАЗДЕЛА><input name=catalogue type=hidden value=1><input name='curPos' type='hidden' value=''><input type='hidden' name='posting' value='1'>
<table cellpadding=0 cellspacing=10 border=0>
<tr valign=top><td>Имя (*):<br><input name=f_Name type=text size=30 maxlength=255 value=''><br>E-mail (*):<br><input name=f_Email type=text size=30 maxlength=255 value=''></td>
<td><br><input id=f2 type=checkbox name=f_news value=1 checked> <label for=f2>подписка на новости</label><br><input id=f3 type=checkbox name=f_publications value=1> <label for=f3>подписка на публикации</label></td>
</tr>
<tr>
<td colspan=2><br><input id=f5 type=checkbox name=f_html value=1> <label for=f5>отправлять в письме текст новости</label></td>
</tr>
</table>
Звездочкой (*) отмечены поля, обязательные для заполнения.<hr size=1>
<div align=right><input value='Подписаться на рассылку' type=submit></div></form>


Действие после добавления объекта:
Код:

";
//в данном примере номер шаблона Message62
if(!$f_news && !$f_publications){
mysql_query("DELETE FROM Message62 WHERE Email='$f_Email';");
echo "<b>Вы отписались от всех рассылок!</b><br><br><a href=/subscribe/>Вернуться на страницу подписки</a>";
}else{
if(eregi("^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,4}$", $f_Email)){
echo "Вы подписались на рассылку ".($f_news?"новостей":"").($f_news && $f_publications?"/":"").($f_publications?"материалов":"")."<br><br><a href=/subscribe/>Вернуться на страницу подписки</a>";
}else{
mysql_query("DELETE FROM Message62 WHERE Email='$f_Email';");
echo "Вы указали не верный email! <br><br><a href=/subscribe/>Вернуться на страницу подписки</a>";
}
}
echo "





действие после добавление записи в раздел с новостями добавьте php код

Код:

";
//стандартный шаблон новостей Message2
$result = @mysql_query("SELECT Dt,Name,TextFull FROM Message2 WHERE Message_ID=$message");
//выборка даты,названия и текста новой новости
$data = mysql_fetch_array($result);
mysql_free_result($result);
//составление текста хтмл письма
$html = "<html><body><div style='text-decoration:none;font-family:Verdana;font-size:1.0Em;color:#CE2C43;'>".substr($data['Dt'],0,10)."</div><br><div style='color:#333333;'>".$data['Name']."</div><br><div>".$data['TextFull']."</div><br><br><div><img src='http://".$_SERVER['SERVER_NAME']."/i/strela_right_blue.gif'> <a href='http://".$_SERVER['SERVER_NAME']."/press/news/' style='font-size:0.9Em;text-decoration:none;color:#1E4888;'>перейти к новостям</a></div></body></html>";
//состаление txt письма
$text = "Вы можете посмотреть текст новости по ссылкеnhttp://".$_SERVER['SERVER_NAME']."/press/news/news_".$message.".html";

//выборка определенных подписчиков и использование стандартной функции подписки для создания рассылки
$result = @mysql_query("SELECT Name,Email,html FROM Message62 WHERE news=1");
while ($row = mysql_fetch_array($result)) {
if($row['html']==="1"){
nc_mail2queue($row['Name']." <".$row['Email'].">","info@www.ru","Новости с сайта","",$html);
}else{
nc_mail2queue($row['Name']." <".$row['Email'].">","info@www.ru","Новости с сайта",$text);
}
}
mysql_free_result($result);

echo "Объект добавлен.<br><br><a href=/netcat/?catalogue=1&sub=$sub&cc=$cc&curPos=$curPos>Вернуться в раздел</a>


далее остается только настроить вызов модуля "Подписка и рассылка"

таким образом список анонимных подписчиков находится в отдельной таблице, содержимое которой можно редактировать..
26.02.2007, 20:03
CleanSupport
Cleansupport

Зарегистрирован:
2006-07-11
Сообщений: 2

Цитата:
попробуйте другой рецепт

Ваш рецепт элегантнее! Снимаю шляпу! улыбка

Единственное, что режет слух - это дублирование шаблона подписки. Он ведь теперь должен как минимум задаваться нестандартно для анонимных пользователей. Но, думаю, это легко исправить, вычитывая его из соответствующего поля шаблона новостей.
198 196 2007-02-26 20:03:20 10002
Описание проекта