Joomla 1.5 Показать сообщение и остаться на текущем материале

Тема в разделе "Программирование", создана пользователем panas, 24.05.2010.

  1. panas
    Offline

    panas Недавно здесь

    Регистрация:
    22.08.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Добрый день.
    У меня есть модуль, который связан с компонентом ссылкой вида index.php?option=com_consult&.... При переходе по этой ссылке компонент выполняет определенные манипуляции с БД.

    Необходимо, чтобы после того, как пользователь запросил компонент из модуля, он оставался на той странице, которую он просматривал до этого, а в отведенном месте (<jdoc:include type="message" />) выдалось сообщение об успешном или ошибочном выполнении запроса.

    Я думал реализовать это при помощи setRedirect класса JController, а ссылку для переадресации передавать предварительно из модуля. Но на мой взгляд это велосипед.

    Подскажите, пожалуйста, какие есть варианты решения подобной задачи.
     
  2.  
  3. Fanamura
    Offline

    Fanamura Доброта

    Регистрация:
    12.03.2007
    Сообщения:
    5 108
    Симпатии:
    159
    Пол:
    Мужской
    panas, а почему ajax-запрос не делать?
     
  4. panas
    Offline

    panas Недавно здесь

    Регистрация:
    22.08.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Fanamura, допустим, а как тогда сообщение средствами Joomla выдать?

    Я заметил что так как раз работает компонент com_users при task=logout но понять как это происходит не могу, все как-то запутано. Но сообщение там не выдается.
     
    Последнее редактирование: 24.05.2010
  5. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Хм. Если в компоненте после выполнения операции нет редиректа, то и переходить никуда не должно. Если есть, то убрать и все. А сообщение вывести
    Код (PHP):
    1. $mainframe->enqueueMessage('Все в порядке');
     
  6. panas
    Offline

    panas Недавно здесь

    Регистрация:
    22.08.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    В принципе логика ясна, но ведь меняется компонент. Сначала бы URL вида:index.php?option=com_content&... а после клика на ссылку будет index.php?option=com_some&.. поэтому и будет выводится другое содержимое. Вот например при выходе в модуле mod_login будучи на в каком либо компоненте, после выхода в нем и остаешься. Нужно как-то искать предыдущую ссылку.

    У меня редиректа нет, но происходит изменение содержимого.
     
  7. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Попробуй так
    Код (PHP):
    1. $link = JRequest::getVar('HTTP_REFERER','','SERVER');
    2. $this->setRedirect($link,$msg);

    Правда есть угроза зацикливания
     
  8. panas
    Offline

    panas Недавно здесь

    Регистрация:
    22.08.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    В чем заключается угроза зацикливания?
     
  9. Offline

    _voland_ специалист

    Регистрация:
    12.04.2008
    Сообщения:
    2 173
    Симпатии:
    102
    Пол:
    Мужской
    Можно создать всплывающий div и в него содержимое копонента через ссылку вида .....&tmpl=component
     
  10. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Неверное перенаправление на странице
    Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.
     
  11. panas
    Offline

    panas Недавно здесь

    Регистрация:
    22.08.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Вы имеете ввиду делать Ajax запрос и сообщение выводить в <div>?
     
  12. panas
    Offline

    panas Недавно здесь

    Регистрация:
    22.08.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Сорри, но не понял :(
    Как может произойти зацикливание если метод контроллера выполнит переадресацию и все?
     
    Последнее редактирование: 25.05.2010
  13. Offline

    _voland_ специалист

    Регистрация:
    12.04.2008
    Сообщения:
    2 173
    Симпатии:
    102
    Пол:
    Мужской
    да.. (8 букв).
     
  14. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Угу и переадресует к методу в котором обратный редирект. Не заморачивайся. Написал на всякий случай, пару раз наступал на эти грабли.
     
  15. panas
    Offline

    panas Недавно здесь

    Регистрация:
    22.08.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Немножко порылся в кодах готовых модулей и нашел решение даной задачи. В кратце опишу.
    В форме модуля добавляем дополнительное поле :
    Код (html):
    1. <input type="hidden" name="return" value="<?php echo $return;?>" >

    Код (PHP):
    1. function getReturnURL(){
    2.     $uri = JFactory::getURI();
    3.     $url = $uri->toString(array('path', 'query', 'fragment'));
    4.     return base64_encode($url);
    5. }
    6. $return=getReturnURL();

    и загоняем туда ссылку на текущий материал в закодированом виде.
    Теперь в компоненте раскодировываем эту ссылку и делаем на нее переадресацию возвращаясь назад.
    Код (PHP):
    1. if ($return = JRequest::getVar('return', '', 'method', 'base64')) {
    2.     $return = base64_decode($return);
    3.     if (!JURI::isInternal($return)) {
    4.             $return = '';
    5.     }
    6. }
    7. $this->setRedirect($return,'Сообщение'); //$this - ссылка на объект JController

    Вуаля.
     

Поделиться этой страницей

Загрузка...