Ajax Joomla. Как выполнить запрос в базу данных

Опубликовано 06 Января 2015 в Joomla

Ежедневно перед нами встают десятки задач от наших клиентов. Мол здесь необходимо допилить, тут докрутить. Дело привычное, выполнимое.

Незадолго до празднования Нового года, к нам обратилась сотрудница салона красоты "Эгоистка" из Колпино с просьбой создать систему бронирования для сайта. Конечно в интернете полно различных компонент, но каждый из них чем-то нас не устраивал. Да и зачем тратить финансы на чье-то дитя, когда можно создать своё :) ?

Ночи, кофе, печеньки...

Хотели бы поделиться методом реализации подзадачи: Как выполнить запрос в базу данных Joomla посредством Ajax из javascript.

var myRequest = new Request({
            url: 'index.php?option=com_mycomponent&task=MyFunction&format=json',
            method: 'get',
            onSuccess: function(response){
                
                //var arr = JSON.parse(response);
                
            },
            onFailure: function(){
                //alert('onFailure');
            }
        });
        
myRequest.send('param1='+param1); 

Ничего сложного. Разбирать это нет необходимости, однако обращу ваше внимание на некоторые участки кода: 

  • при составлении url запроса правильно укажите имя компонента к которому стоит выполнить запрос, в нашем случае это com_mycomponent и наименование задачи (функции) в нашем случае это MyFunction. Последний параметр указывает на формат выходных данных, нам же удобней было принять всё в формате JSON.
  • после успешного выполнения запроса мы парсим данные, которые вернула нам функция основного контроллера компонента

Сама функция MyFunction должна находится в /components/com_mycomponent/controller.php. В ней мы обращаемся к базе данных и отдаем результат во View компонента в формате JSON.

public static function MyFunction()
    {
        $param = JRequest::getVar('param1', null, 'GET');
        if ($param) {
            $db = JFactory::getDbo();
            $query = $db->getQuery(true);
            $query->select('field1,field2');
            $query->from('#__tablename');
            $query->where('field3 = '. $db->quote($param));
            $db->setQuery($query);
            $rows = $db->loadObjectList();
        
            $res = Array();
            
            foreach ($rows as $row)
            {
                $res[] = $row;
            }
            
    	    echo json_encode($res);
        }
    }

Вот так можно просто сделать запрос ajax joomla. Вам остается только сделать добрый копипаст :)