Как стать автором
Обновить

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

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

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

И напоследок маленький опрос, дабы мне понять, является ли подобный материал достойным для публикации на страницах хабра, или не стоит размениваться на такие мелочи.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Уместна ли подобная информация («мелочи» или краткие туториалы) на страницах Хабра
30.77% Нет28
40.66% Да, но не все подряд37
16.48% Да, но не все подряд. Эта статья тоже не уместна.15
12.09% Да11
Проголосовал 91 пользователь. Воздержались 33 пользователя.
Теги:
Хабы:
Всего голосов 5: ↑4 и ↓1+3
Комментарии8

Публикации

Истории

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн