Добрый день. У меня есть модуль, который связан с компонентом ссылкой вида index.php?option=com_consult&.... При переходе по этой ссылке компонент выполняет определенные манипуляции с БД. Необходимо, чтобы после того, как пользователь запросил компонент из модуля, он оставался на той странице, которую он просматривал до этого, а в отведенном месте (<jdoc:include type="message" />) выдалось сообщение об успешном или ошибочном выполнении запроса. Я думал реализовать это при помощи setRedirect класса JController, а ссылку для переадресации передавать предварительно из модуля. Но на мой взгляд это велосипед. Подскажите, пожалуйста, какие есть варианты решения подобной задачи.
Fanamura, допустим, а как тогда сообщение средствами Joomla выдать? Я заметил что так как раз работает компонент com_users при task=logout но понять как это происходит не могу, все как-то запутано. Но сообщение там не выдается.
Хм. Если в компоненте после выполнения операции нет редиректа, то и переходить никуда не должно. Если есть, то убрать и все. А сообщение вывести Код (PHP): $mainframe->enqueueMessage('Все в порядке');
В принципе логика ясна, но ведь меняется компонент. Сначала бы URL вида:index.php?option=com_content&... а после клика на ссылку будет index.php?option=com_some&.. поэтому и будет выводится другое содержимое. Вот например при выходе в модуле mod_login будучи на в каком либо компоненте, после выхода в нем и остаешься. Нужно как-то искать предыдущую ссылку. У меня редиректа нет, но происходит изменение содержимого.
Попробуй так Код (PHP): $link = JRequest::getVar('HTTP_REFERER','','SERVER'); $this->setRedirect($link,$msg); Правда есть угроза зацикливания
Неверное перенаправление на странице Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.
Сорри, но не понял Как может произойти зацикливание если метод контроллера выполнит переадресацию и все?
Угу и переадресует к методу в котором обратный редирект. Не заморачивайся. Написал на всякий случай, пару раз наступал на эти грабли.
Немножко порылся в кодах готовых модулей и нашел решение даной задачи. В кратце опишу. В форме модуля добавляем дополнительное поле : Код (html): <input type="hidden" name="return" value="<?php echo $return;?>" > Код (PHP): function getReturnURL(){ $uri = JFactory::getURI(); $url = $uri->toString(array('path', 'query', 'fragment')); return base64_encode($url); } $return=getReturnURL(); и загоняем туда ссылку на текущий материал в закодированом виде. Теперь в компоненте раскодировываем эту ссылку и делаем на нее переадресацию возвращаясь назад. Код (PHP): if ($return = JRequest::getVar('return', '', 'method', 'base64')) { $return = base64_decode($return); if (!JURI::isInternal($return)) { $return = ''; } } $this->setRedirect($return,'Сообщение'); //$this - ссылка на объект JController Вуаля.