У меня есть версия Joomla 1.15.26. Я использовал компоненты AcePolls http://www.joomace.net/downloads/acepolls/acepolls-for-joomla-15
В моем index.php у меня есть такой код:
<jdoc:include type="message" />
<jdoc:include type="component" />
Моя проблема в том, что когда я голосую за опрос, сообщение от контроллера не отображается на той же странице. Но когда я захожу на другую страницу, это сообщение там.
Я не мог найти, где это проблема, так как на моем локальном хосте он работает нормально, но на живом сервере он не работает должным образом.
Как я понимаю системные сообщения хранятся как в очереди в joomla. Но здесь он стоит в очереди, но отображается при следующей перезагрузке (не при перезагрузке той же страницы, при посещении другой страницы).
Мой контроллер:
function vote() {
$mainframe = JFactory::getApplication();
$poll_id = JRequest::getInt('id', 0);
$option_id = JRequest::getInt('voteid', 0);
$poll =& JTable::getInstance('Poll', 'Table');
$item_id = JRequest::getInt('itemid');
if (!$poll->load($poll_id) || $poll->published != 1) {
JError::raiseWarning(404, JText::_('ALERTNOTAUTH'));
return;
}
$cookieName = JUtility::getHash($mainframe->getName().'poll'.$poll_id);
$voted = JRequest::getVar($cookieName, '0', 'COOKIE', 'INT');
if ($voted || !$option_id) {
if ($voted) {
$msg = JText::_('COM_ACEPOLLS_ALREADY_VOTED');
$tom = "error";
}
if (!$option_id){
$msg = JText::_('COM_ACEPOLLS_NO_SELECTED');
$tom = "error";
}
}
else {
require_once(JPATH_COMPONENT.DS.'models'.DS.'poll.php');
$model = new AcepollsModelPoll();
if ($model->vote($poll_id, $option_id)) {
//Set cookie showing that user has voted
setcookie($cookieName, '1', time() + 60*$poll->lag);
}
$msg = JText::_('COM_ACEPOLLS_THANK_YOU');
$tom = "";
if (JFactory::getUser()->id != 0) {
JPluginHelper::importPlugin('acepolls');
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger('onAfterVote', array($poll, $option_id));
}
}
// set Itemid id for links
$menu = &JSite::getMenu();
$items = $menu->getItems('link', 'index.php?option=com_acepolls');
$itemid = isset($items[0]) ? '&Itemid='.$items[0]->id : '';
if(!$itemid)
$itemid = '&Itemid='.$item_id;
$this->setRedirect(JRoute::_('index.php?option=com_acepolls&view=poll&id='. $poll_id.':'.$poll->alias.$itemid, false), $msg, $tom);
}
Дайте мне знать, если требуется какая-либо другая информация.
Заранее спасибо.
Задача ещё не решена.
Других решений пока нет …