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

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

Ajax-запрос в плагин с помощью компонента com_ajax

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

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

Сообщений: 30


« : 11.06.2015, 01:03:18 »

Возникла надобность выполнить ajax-запрос. В общем-то любым способом, который потребует наименьших усилий.
Попалась вот такая статья: http://inet-reklama.com/blog/joomla/ajax-v-joomla-3-2.html

Там описывается, как можно посылать ajax-запросы в модули и плагины, используя компонент com_ajax.
Я решил поместить обработчик запроса в плагине, так как создавать для этого модуль совсем нелогично.
Честно говоря, я решил пока не создавать новый плагин, а использовать один из уже установленных.
Я выбрал плагин recaptcha и следовал инструкциям из приведенной статьи.

В файле recaptcha.php я создал метод onAjaxRecaptcha
Цитировать
   public function onAjaxRecaptcha() {
      $input = JFactory::getApplication()->input;
      $text = $input->getString("text");
      $log = fopen('ajaxlog.txt', 'a+');
      fwrite($log, 'ajax AJAX '.$text);
      fclose($log);
      echo $text;
   }

Запрос отправляю так
Цитировать
   $('#order_submit').click(function() {
      $.post( "index.php?option=com_ajax&plugin=recaptcha&format=raw&text=proizvolnij_text", function(data) {
         alert(data);
      });
   });

В свой обработчик я не попадаю, что видно хотя бы по тому, что не создался файл ajaxlog.txt, ну и alert выдает пустое окошко.
Использую Joomla 3.4.

Еще одна деталь.  Автор статьи пишет: "Важно! - при запросе в плагины, будут использоваться только те плагины которые находятся в группе AJAX!".
А какие плагины находятся в группе AJAX?
Записан
beliyadm
Профи
********

Репутация: +1566/-61
Offline Offline

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


Севастополь == Россия


« Ответ #1 : 11.06.2015, 02:12:29 »

А смысл?
У вас уже есть компонент com_ajax
В нем создаете функцию и к ней обращаетесь
К примеру файл \components\com_ajax\ajax.php выглядит так

Код
$Itemid	= JRequest::getInt( 'Itemid', 1, 'get' );
$task = JRequest::getVar( 'task', 1, 'get' );
switch ($task)
{
case 'mytask':
mytask();
break;
}
 
function mytask()
{
echo 'mytask';
}
 

В своем js обработчике с фронта вызываете эту функцию (понятно, что это я выдрал из обработки формы, но суть думаю ясна)
Код
$('#block').on('click', ".button", function(){
$.ajax({
          type: 'POST',
              url: '/index.php?option=com_ajax&format=raw&task=mytask',
              target: '',
              data: form_data,
              cache: false,
success: function(response){
$('#success').text(response);
}
});
});

В итоге у вас в блоге с id=success появится текст "mytask"

Либо можно сделать свой файл обработчик (вместо компонента), в котором подгружать ядро и пользоваться стандартными опциями движка в плане API, если так интересно - тоже покажу пример
Записан
eugenex
Осваиваюсь на форуме
***

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

Сообщений: 30


« Ответ #2 : 11.06.2015, 16:44:15 »

Да, так конечно лучше будет.

У меня получается сейчас отправить запрос в AJAX.php, но не получается, судя по всему, принять там параметры.

Вот мой код
Цитировать
$task   = JRequest::getVar( 'task', 1, 'get' );
//$input = JFactory::getApplication()->input;
//$task = $input->getString('task , 0);

switch ($task)
{
   case 'order' :
      $log = fopen('ajaxlog.txt', 'a+');
      fwrite($log, 'ajax  '.$text);
      fclose($log);
      $txt   = JRequest::getVar( 'txt', 1, 'get' );
      orderMail($txt);
      
      break;
}

Так отправляю запрос
Цитировать
   $('#order_submit').click(function() {
      $.ajax({
              type: 'POST',
               url: '/Joomla/index.php?option=com_ajax&format=raw&task=order',
               data: {txt: 'proizvolnijtext'},
            success: function(response){
               alert(response);
            }
      });
   });

В case 'order' я не попадаю. В AJAX.php запрос приходит, что видно хотя бы потому, что если сделать в нем ошибку, она возвращается алертом.

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

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

Сообщений: 30


« Ответ #3 : 11.06.2015, 18:08:38 »

А все получилось, просто нужно было "amp;" из URL убрать.  Наверное, это форум так "отформатировал".
« Последнее редактирование: 13.06.2015, 00:59:40 от eugenex » Записан
Страниц: [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