Здраствуйте, читатели!
Сегодня хотелось поделиться решением, которое я использовал для реализации 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