Joomla: JSON обработка запросов AJAX

Хочу рассказать точнее записать что-бы не забывать реализацию JSON запросов к серверу через библиотеку jQuery функция getJSON , часто уж голова выкидывает из памяти редко используемую информацию ))).

Естественно разработчики движка Joomla начиная с версии 1.5 которые используют шаблон программирования MVC позаботились об реализации данного функционала. А делается это просто:

Серверная часть: В вид (view) компонента добавляем класс view.json.php следующего содержания

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view' );

class ComponentViewAjax extends JView
{	
		
	var $json = array();

	public function display($tpl = null)
	{	
		$result = new stdClass(); // или передать некий объект
		$this->json['result'] = $result;
		echo json_encode($this->json);
		exit();
	}
	
}

Надеюсь пояснять не надо что к чему иначе это не ваше и передайте работу профессионалу (не люблю это обращение).

И сам js запрос в сформированном html:

$.getJSON("<?php echo JURI::root(false) ?>index.php?option=com_component&view=ajax&format=json&request=1", function(json){
	alert(json.result); // вывод JSON объекта
});

Как видите все ну очень просто, за что и люблю разрабатывать сайты на Joomla, как бы его не хаяли, но гибкость в руках специалиста горы сворачивает. Таким же образом формируется и xml ответ на запрос, куда поставить xml думаю объяснять не надо ;)

  • Добрый день. Имеется сайт на движке Joomla и для него необходимо написать приложение под Android. Планируется брать данные из БД сайта. Подскажите, как лучше реализовать эту задачу (получить данные из БД по запросу в формате json)? Самому написать компонент, как описан выше, или в компонент com_content добавить новые методы?
  • job
    День добрый. На вашем месте, я бы добавил view.json.php в нужный компонент и вьювер (это не нарушит ядро и сохранится обновление). В принципе это и описано в статье. а логику для view.json.php скопировать из view.html.php но вывод данных естественно перевести в json и передать через echo с остановкой процесса, чтоб не передать в шаблон сайта. запрос такой же как на сайте только в урл добавить get(post) параметр format=json. В дополнении можете реализовать все с публичными и приватными ключами, это уже вопрос техники, так сказать сделать подобие API