Форум русской поддержки Joomla!® CMS
05.12.2016, 00:23:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Модуль подписка для гостей (неавторизованных)

 (Прочитано 313 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Sergeyy
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 121


« : 22.11.2015, 16:05:12 »

Здравствуйте уважаемые форумчане!
Написал модуль подписки неавторизованным пользователям на новые комментарии.
Появилась пара вопросов мне непонятных.

helper.php
Код
<?php
// no direct access
defined('_JEXEC') or die;
class ModMailHelper
{
function getPost()
{
$app = JFactory::getApplication();
$input = $app->input;
$ta=$input->get('hel');
if($ta=='hel')
{
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
$option = JRequest::getVar('option', '');
$id = JRequest::getString('id');
$lang = JFactory::getLanguage()->getTag();
$mail = $input->get('email', '', 'String');
$user = JFactory::getUser();
if ($user->get('id'))
{
$userid = (int) $user->get('id');
$name = $user->name;
}
else
{
$userid = 0;
$name = 0;
}
$db = JFactory::getDbo();
$query = $db->getQuery( true )
   ->select('(id)')
   ->from($db->quoteName('#__jcomments_subscriptions'))
   ->where ($db->quoteName('email'). ' = ' . $db->quote($mail))
   ->where ($db->quoteName('object_id'). ' = ' . $db->quote($id));
$xid = $db->setQuery( $query )->loadResult();
if (!$xid)
{
$query = $db->getQuery(true);
$query->insert($db->quoteName('#__jcomments_subscriptions'));
$columns = array( $db->quoteName('email'),
$db->quoteName('object_id'),
$db->quoteName('lang'),
$db->quoteName('object_group'),
$db->quoteName('userid'),
$db->quoteName('name'),
$db->quoteName('hash'),
$db->quoteName('published'));
$query->columns($columns);
$query->values($db->Quote($mail)
     . ', ' . $db->quote($id)
     . ', ' . $db->quote($lang)
     . ', ' . $db->quote($option)
     . ', ' . $db->quote($userid)
     . ', ' . $db->quote($name)
     . ', ' . $db->quote(md5($id . $option . $userid . $mail . $lang))
     . ', ' . $db->quote(1));
$db->setQuery($query);
$db->query();
if ($query)
{ // Сообщение о подписке
$app->enqueueMessage('Вы подписаны на уведомления о новых комментариях');
}
}
else
{ // Сообщение об ошибке
$app->enqueueMessage('Вы уже подписаны на уведомления о новых комментариях!', 'error');
}}}}
?>
 

tmpl/default.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die;
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
 
$option = JRequest::getVar('option', '');
$view = JRequest::getVar('view', '');
if ($option == $params->get('option') && $view == $params->get('view')){
?>
 
<div class="mail<?php echo $moduleclass_sfx ?>" >
 
<form action="" name="adminForm" id="adminForm" method="post" class="form-validate" >
     <input  id="email" name="email" type="text" class="inputbox required validate-email" size="20" /><button type="submit" >Подписаться</button>
     <input type="hidden" name="task" value="" />
     <input type="hidden" name="hel" value="hel" />
 
<?php  
$url = $_SERVER['HTTP_REFERER'];
$return = base64_encode($url);
?>
<input type="hidden" name="return" value="<?php echo $return; ?>" />
<?php echo JHtml::_('form.token'); ?>
</form>
</div>
<?php
}
?>
 

При обнавлении страницы (F5) снова происходит отправка данных
Как это решить?

Вот эта строчка смущает       JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
В нужное ли место и правильно я её вставил?

Буду очень благодарен за доработку модуля
Записан
NewUsers
Давно я тут
****

Репутация: +32/-0
Offline Offline

Пол: Мужской
Сообщений: 394


« Ответ #1 : 22.11.2015, 16:13:27 »

В сообщении о подписке добавь
Код:
$app->redirect($_SERVER['HTTP_REFERER']);

После того как будет выполнен код тебе перенаправит на туже страницу где ты и был, это считается как перезагрузка страницы, но сообщение будет выводиться в любом случае...
Записан
NewUsers
Давно я тут
****

Репутация: +32/-0
Offline Offline

Пол: Мужской
Сообщений: 394


« Ответ #2 : 22.11.2015, 16:13:56 »

...
Записан
Sergeyy
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 121


« Ответ #3 : 22.11.2015, 16:20:31 »

В сообщении о подписке добавь
Код:
$app->redirect($_SERVER['HTTP_REFERER']);

После того как будет выполнен код тебе перенаправит на туже страницу где ты и был, это считается как перезагрузка страницы, но сообщение будет выводиться в любом случае...
Ок! Спасибо работает!
Вот этот код в шаблоне значит не нужен:
Код:
<?php 
$url = $_SERVER['HTTP_REFERER'];
$return = base64_encode($url);
?>
<input type="hidden" name="return" value="<?php echo $return; ?>" />
Записан
NewUsers
Давно я тут
****

Репутация: +32/-0
Offline Offline

Пол: Мужской
Сообщений: 394


« Ответ #4 : 22.11.2015, 16:24:44 »

Вот этот код в шаблоне значит не нужен:
Код:
<?php 
$url = $_SERVER['HTTP_REFERER'];
$return = base64_encode($url);
?>
<input type="hidden" name="return" value="<?php echo $return; ?>" />

Нет, он уже не нужен...
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet