Ajax-запросы к модулям и плагинам (и кастомным компонентам)
Анатомия AJAX запроса
Требуется
option=com_ajax[module|plugin]=nameformat=[json|debug|raw]
Опционально
method=[custom fragment]по умолчанию становитсяget, если не указано.
Обзор
Все запросы начинаются с ?option=com_ajax, который вызывает это расширение, должны содержать в себе тип расширения для вызова и формат возвращаемых данных.
Дополнительные переменные и значения, используемые вашим расширением также могут быть включены в URL.
Например запрос к ?option=com_ajax&module=session вызовет mod_session с результатами, возвращенными в формате по умолчанию. Код ?option=com_ajax&plugin=session&format=json вызовет метод onAjaxSession плагинов с выводом результата в JSON.
Детали
Запросы плагинов должны включать в себя переменнуюplugin в URL в паре с событием плагина, например plugin=session для onAjaxSession.
Это значение также используется для:
- Имени класса плагина, который следует соглашению
plgAjax[Name] - Имени функции, которая следует соглашению
onAjax[Name]/ - Группа плагинов по умолчанию
ajax. Вы можете сменить её, указав параметр запросаgroup(начиная с Joomla! 3.4).
Запрос к кастомным компонентам
Параметры запроса примерно такие: index.php?option=com_catalog&task=getAjax&action=methodname.
При этом в главном контроллере должен быть прописан метод getAjax:
public function getAjax()
{
$input = JFactory::getApplication()->input;
$model = $this->getModel( 'ajax' );
$action = $input->getCmd( 'action' );
$reflection = new ReflectionClass( $model );
$methods = $reflection->getMethods( ReflectionMethod::IS_PUBLIC );
$methodList = array();
foreach ( $methods as $method ) {
$methodList[] = $method->name;
}
if ( in_array( $action, $methodList ) ) {
$model->$action();
}
exit;
}
А в модели ajax должен быть метод methodname:
public function methodname(){
try{
$result = 'answer';
echo new JResponseJson($result);
}catch(Exception $e){
echo new JResponseJson($e);
}
exit;
}
