Как известно, Ajax это определенная технология фонового обмена информацией браузера с сервером без перезагрузки всего содержимого страницы. Описывать саму технологию и как она работает я не буду, статей на эту тему и так предостаточно. Рассмотрим использование технологии ajax применительно к CMS Joomla 2.5 с использованием JQuery (это один самых простых вариантов, плюс кроссплатформенность обеспечена).
- Ajax без использования фрэймворка Joomla (все функции, например, работа с базой данных, получение информации о пользователях пишем своими руками)
- Ajax + фрэймворк Joomla 2.5 (имеем возможность использовать API джумлы, например, для получения информации о пользователе смело можем использовать код: $user = JFactory::getUser)
- Ajax + полноценное использование всех возможностей Joomla 2.5, включая MVC (модель-вью-контроллер)
Ajax без использования фрэймворка Joomla 2.5
Все примеры будем рассматривать с данными Joomla 2.5, которые ставятся при ее инсталляции, шаблон по умолчанию «Beez_20». Для начала в какой-нибудь части шаблона вставим функцию на javascript, которая отправляет запрос на сервер с помощью jquery. Выглядеть она будет слеудющим образом:
function zapros() { if (window.jQuery) { alert("jquery загружен"); //окно сигнализирует, что jquery загружен и готов к использованию $.ajax({ //функция jquery type: "POST", url: "ajax.php", //файл в корне сайта с информацией data: "mydata=data", //данные для сервера success: function(tut_dannye_ot_servera){ //данная функция вызывается при усппешной отработке запроса alert( "Data Saved: " + tut_dannye_ot_servera ); //окно сигнализирует, что пришел ответ и показывает, что нам передал сервер $('#korzina').replaceWith( tut_dannye_ot_servera ); //функция jquery помещает ответ в место с id=#korzina } }); } }
также, куда-нибудь в шаблон, компонент либо модуль вставляем кнопку
<input type="button" name="Sub" class="button" value=жмите_сюда onclick = zapros() <div id=korzina></div>
файл ajax.php, например, выглядит следующим образом
<?php Echo “ответ сервера”; ?>
В результате, при нажатии на кнопку «жмите_сюда», на сервер отправится «POST» запрос с данными «mydata=data». На сервере будет открыт файл «ajax.php», в котором на PHP вы можете писать любой код, и вся выданная информация на отображение будет передана вашему сайту в переменную «tut_dannye_ot_servera». Затем, с помощью функции jquery «.replaceWith()», содержимое переменной помещаем в место, где ранее был тег с id=#korzina.
В данном варианте реализации механизма Joomla 2.5 + ajax мы, увы, не можем использовать все прелести, которые дает нам фрэймворк Joomla. Все придется писать своими ручками.
Ajax + фрэймворк Joomla 2.5
При такой реализации, все остается, как в предыдущем варианте, только файл ajax.php будет выглядеть по другому
<?php define('_JEXEC', 1); define('DS', DIRECTORY_SEPARATOR); if (file_exists(dirname(__FILE__) . '/defines.php')) { include_once dirname(__FILE__) . '/defines.php'; } if (!defined('_JDEFINES')) { define('JPATH_BASE', dirname(__FILE__)); require_once JPATH_BASE.'/includes/defines.php'; } require_once JPATH_BASE.'/includes/framework.php'; $app = JFactory::getApplication('site'); $app->initialise(); $user = JFactory::getUser; Echo “ответ сервера”; ?>
Теперь мы можем использовать API функции Joomla 2.5
Ajax + полноценное использование всех возможностей Joomla 2.5, включая MVC (модель-вью-контроллер)
Чтобы не создавать лишних модулей, но, при этом было бы понятно, как все работает, рассмотрим данный пример на модуле «Breadcrumbs». Он выводится в основном шаблоне «Beez_20» на позиции
<jdoc:include type="modules" name="position-2" />
изменять его код нам не понадобиться. Шаблон «Atomic» изменим так, чтобы он выглядел следующим образом:
<?php defined('_JEXEC') or die; echo 'получено по ajax'; ?> <jdoc:include type="modules" name="position-2" />
Функция инициирующая запрос по ajax будет выглядеть так
function zapros() { if (window.jQuery) { alert("jquery загружен"); //окно сигнализирует, что jquery загружен и готов к использованию $.ajax({ //функция jquery type: "POST", url: "index.php", data: "template=atomic ", //данные для сервера success: function(tut_dannye_ot_servera){ //данная функция вызывается при усппешной отработке запроса alert( "Data Saved: " + tut_dannye_ot_servera ); //окно сигнализирует, что пришел ответ и показывает, что нам передал сервер $('.breadcrumbs').replaceWith( tut_dannye_ot_servera ); //функция jquery помещает ответ в место с } }); } }
Как видим, в функции изменились отправляемые данные (мы посылаем другой шаблон), также место куда нужно поместить результат (.breadcrumbs). И самое главное, файл который будет открываться при запросе на сервере «index.php».
В результате Вы увидите, что при нажатии кнопки, инициирующей запрос, у Вас изменится содержимое «Breadcrumbs».
Представьте, что вместо «Breadcrumbs» у Вас корзина заказов. При таком подходе не требуется писать разный код для вывода ее обычным образом и через ajax. Достаточно иметь определенный шаблон, который Joomla будет использовать для отправки результата. При этом не нужно плодить шаблоны для каждого модуля. Все можно реализовать в одном шаблоне.