Для того чтобы сделать ajax-вызов своему плагину необходимо:
1. В функции плагина, например onAfterRoute(), либо в любой вашей функции написать js запрос ajax, например на Jquery т.к. на мой взягляд он самый короткий и понятный, где при клике по кнопке с id="articleiz" происходит GET запрос по адресу 

"'.JUri::base().'index.php?option=com_ajax&plugin=rokbox&group=system&format=json&send=1&vote0=1&vote1=привет&vote2=пока"

 где используемые переменные:

 

option - должен быть указан com_ajax
rokbox - имя нашего плагина без приставки plg_ (в примере имя плагина rokbox)
group - Данная переменная обозначает группу плагина, по умолчанию используется ajax. Соответственно может быть ступор при разработке плагинов не принадлежащих данной категории, и чтобы данные корректно отправлялись/возвращались, рекомендую вам всегда использовать данную переменную и явно указывать, какая группа плагинов используется (system, content, ajax, своя группа, и пр.).
format - формат получаемых данных, доступны варианты raw, json и debug

send=1&vote0=1&vote1=привет&vote2=пока - переменные и их значения через &;

public function onAfterRoute(){	
	$js = '
	jQuery(document).ready(function($){
	    jQuery("#articleiz").on("click", function(){
		    jQuery.ajax({
			    type: "GET",
                url: "'.JUri::base().'index.php?option=com_ajax&plugin=rokbox&group=system&format=json&send=1&vote0=1&vote1=привет&vote2=пока",
			    success: function(data, status) {
			        var response = jQuery.parseJSON(data);
                    console.log(data);
				    console.log(response);
			    },
			    error: function(data, status) {
			        var response = jQuery.parseJSON(data);
                    console.log(data);
				    console.log(response);
			    }
		    });
	    });
    });
	';
	$document	= JFactory::getDocument();
	$document->addScriptDeclaration($js);
}

 Далее наши отправленные данные должны приниматься методом onAjaxPluginName, данный метод используется по умолчанию в php файле плагина (смотрите исходные коды ниже).

public static function onAjaxRokbox(){	
	$app = JFactory::getApplication();	 
        if( $app->input->getVar( 'send', '' ) === '1' ) {             
            echo json_encode( array('vote0' => $app->input->getVar( 'vote0'),'vote1' => $app->input->getVar( 'vote1'),'vote2' => $app->input->getVar( 'vote2') )); 
        } else {           
            echo json_encode( array('error' => JText::_('Ошибка передачи данных')) );  
        } 
        $app->close();
}

 В результате при клике по кнопке в консоли мы увидим следующие результаты запроса и ответа функции onAjaxRokbox в виде массива json, содержащего наши переданные переменные:

Screenshot 117

 

Screenshot 118

 

При написании статьи использовался материал с сайта http://siterybinsk.ru/categories/stati/plaginy-v-cms-joomla/ajax-v-pluginakh-joomla

Друзья!!!
Спасибо Вам всем большое за поддержку проекта. Если не сложно при переводе пишите в комментарий свой email. Я буду знать от кого и мне очень приятно будет оказать посильную помощь этому человеку.

Если кому нужен другой по функционалу плагин, модуль или еще что то пишите в комментариях.

Добавить комментарий


Комментарии   

0 # Алексей 01.02.2023 04:49
Отличная статья. Не могу нигде найти ответ, как сделать несколько разных запросов.
функция onAjaxRokbox - стоится путем присоединения к onAjax название плагина Rokbox, название одно, а как сделать следующюю обработку запроса?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
0 # Super User 01.02.2023 14:28
Не совсем понял, что значит следующую обработку запроса? например вы можете в переменную которая передается через ajax отправить разные значения, а на приеме "слушать" через $app->input->ge tVar( 'send', '' ) свою переменную, как только она появилась выполняете определенный код, т.е. отправляя разные значения переменной "send", вы можете выполнять на принимающей стороне сервера разные функции
например
if( $app->input->ge tVar( 'send', '' ) === '1' ) { 
выполнить функцию 1
}
if( $app->input->ge tVar( 'send', '' ) === '2' ) { 
выполнить функцию 2
}
и т.д.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
0 # Алексей 01.02.2023 14:37
Это я понял, примерно так и сделал. В модуле есть возможность передавать разные варианты для обработчика " method=myMethod ", таким образом это дает возможность реализовать в модуле несколько различных обработчиков AJAX запросов.
В плагине можно только использовать один метод (функцию) "onAjaxRokbox" и все.
Поэтому пришлось делать примерно так как вы написали.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору