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

  • 4 Ответов
  • 442 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Sergeyy

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

helper.php
Код: 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
<?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'));
В нужное ли место и правильно я её вставил?

Буду очень благодарен за доработку модуля
joomla 2.5

*

NewUsers

  • Завсегдатай
  • *****
  • 579
  • 46
В сообщении о подписке добавь
Код
$app->redirect($_SERVER['HTTP_REFERER']);

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

*

NewUsers

  • Завсегдатай
  • *****
  • 579
  • 46

*

Sergeyy

  • Осваиваюсь на форуме
  • ***
  • 147
  • 3
В сообщении о подписке добавь
Код
$app->redirect($_SERVER['HTTP_REFERER']);

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

*

NewUsers

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

Нет, он уже не нужен...