AJAX в компонентах 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.

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

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

Уместна ли подобная информация («мелочи» или краткие туториалы) на страницах Хабра

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Никто ещё не голосовал. Воздержался 1 человек.

ссылка на оригинал статьи http://habrahabr.ru/post/194746/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *