Разработка сайтов на UMI.CMS
Знать UMI.CMS в совершенстве невозможно.
Даже сами разработчики знают о ней не все...

UMi

Ursa Minor

AJAX запросы в UMI.CMS

Требуется получать данные от UMI.CMS с помощью AJAX.

Поскольку вопрос о связке UMI.CMS + ajax возникает часто, рассмотрим его.

Конечный продукт состоит из двух составляющих:

  • яваскрипт, отправляющий запрос и принимающий ответ;
  • серверный скрипт

Начнем с сервера.

В UMI.CMS есть такая замечательная вещь, как системные страницы. Увидеть такую вы можете, например, обратившись по адресу /users/registrate/. Что это? - правильно, /имя_модуля/имя_метода/. Мы видим, что в UMI.CMS можно обращаться к методам классов как к url. Естественно, при этом система производит и полную проверку прав доступа к методу. Эту особенность мы и будем использовать для реализации ajax запросов.

Будем писать кастомный  метод для модуля content. Примерно так:

public function my_ajax_method(){
    $id = getRequest('id'); //получаем данные из строки запроса
    //что-то делаем
    echo $result;
    exit();
}

Особенности:

  • метод должен не возвращать результат через return, а отправлять в выходной поток
  • метод должен завершаться оператором exit (можно было бы вместо этих двух строк написать def_module::flush($result), но первый вариант кажется мне короче.

 

Теперь переходим к клиентской части.  Для яваскрипта я предполагаю использование фреймворка Mootools.

Применительно к UMI.CMS ajax запросы имеют одну особенность. Поскольку UMI.CMS имеет привычку проверять права доступа на все, что под руку подвернется, то для корректной работы методов нужно вместе с ajax запросом в заголовке передавать куки.

1) Создаем вспомогательный класс

var umiRequest = new Class({
     initialize: function (){

     },
     send: function (request){
         this.cook = document.cookie;//получаем все куки
         request.setHeader('Cookie', this.cook);
         request.send();
    }
});

 

2) Далее  в скрипте объявляем глобальную переменную umi и в дальнейшем посылаем ajax запросы через нее:

var umi = new umiRequest();

function inner_ajax_load(id){
    var request = new Request({
        method: 'post',
        url: '/content/my_ajax_method/?id=' + id,
        evalScripts: true,
        onComplete: function(text){
            ...
            alert(text);//в text находится значение пременной $result из нашего метода
        }

    });
    umi.send(request);
}

Параметр evalScripts следует устанавливать если в полученном ответе требуется исполнять яваскрипты

Собственно, это все. UMI.CMS и ajax - созданы друг для друга)

Новости

30.10.2016

Обновлено описание макроса для вывода всех элементов справочника UMI.CMS с учетом версии 14.

 

21.07.2015

Памятка по обновлению до debian 8.1. Приятно вкусить все плюшки PHP 5.6

11.11.2014

Как выполнить SQL-запрос из bash-скрипта. Памятка

11.11.2014

Как отследить нагрузку сайта на сервер.

06.11.2014

Заготовка для галереи изображений с прокруткой. Не знаю, когда дойдут руки довести ее до вида плагина, поэтому открываю как есть. Можно доработать.

05.11.2014

Выкладываю как заготовку свой слайдер изображений на mootools

Все обновления