AJAX в компонентах Joomla! 2.5

в 2:56, , рубрики: Joomla, joomla 2.5, метки:

Здраствуйте, читатели!
Сегодня хотелось поделиться решением, которое я использовал для реализации AJAX при написании компонентов для Joomla! 2.5.
Сразу хотелось бы предупредить гневные выкрики: «иди в гугл! пользуй поиск! это уже было! бойан!». Это решение не лежит на поверхности и, хоть оно и банальное, чтобы найти его, мне пришлось попотеть.

Лирическое отступление

Также сразу предпрежу, что топик написан с позиции «новичка в Joomla».
Задача передо мной встала тривиальная: сдалать AJAX-запрос со страницы, и получить ответ в формате JSON. Я без всяких подозрений забил в поиск и вместо пары минут тыркания застрял в поисках решения на несколько часов. Конечно я не оставил без внимания топик уважаемого propovednik. Но выяснилось сразу что меня данное решение с параметром tmpl=component не устраивает: Ответ приходил в виде полноценной страницы со всеми заголовками, стилями, подключенными в этих заголовках, и, собственно, JSON ответом, который я выводил в view своего компонента, внутри тега body, но, как и было обещано, без менюшек и прочего великолепия дополнительных модулей. Конечно если бы я использовал фрейм на странице и выдавал ответ темже HTML, все прекрасно, но увы. Применять костыли в виде выдергивания текста из тега body полученной страницы, или второго варианта, предложенного propovednik — можно, но как-то комфортно, хочется найти более «чистое» решение. И мне все не давала мысль что у такого монстра как Joomla, нет элементарного решения. Порыскав еще немного, на буржуйском форуме наткнулся на ссылку. Вкратце: для Joomla 3 написали специальный компонент для работы с AJAX (неуверенно припоминаю, что даже включили его в комплект «из коробки»), но он совместим и с версией 2.5. Это подтолкнуло меня к мысли что на 2.5 все же нет готового решения, как тогоже index2.php в версии 1.5. Но мы не ищем легких путей и решение ставить еще один компонент не для нас! Тогда я решил посмотреть, что они использовали в своем компоненте.

Решение

А решение оказалось элементарным.
Предположим в Вашем компоненте существует специальный View со своей Model, которые ответственны за вывод неоходимого Вам JSON или XML. Вам всего лишь нужно привести default.php в папке tmpl вашего View к следующему виду

<?php
defined('_JEXEC') or die('Restricted access');
$app = JFactory::getApplication();
JResponse::setHeader('Content-Type', 'text/plain', TRUE);

// здесь выводим Ваш текст
echo $this->text;

$app->close();

где $this->text — данные полученные в Model Вашего View.

На этом все, спасибо за внимание!

И напоследок маленький опрос, дабы мне понять, является ли подобный материал достойным для публикации на страницах хабра, или не стоит размениваться на такие мелочи.

Автор: metis

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js