MODX - коннекторы (контекст WWW)

Далее речь пойдет о контексте WWW("front-end"). Или о стороне клиента.

Коннекторы MODX(connectors) - это серверный код(PHP), который обрабатывает клиентские ajax-запросы. Т.е. посылаемые элементами броузера со стороны клиента. В терминах MODX - это контекст "WWW". Или front-end. Запросы могут посылать таблицы, комбо-боксы и вообще все что угодно. Если использовать jQuery для работы с интерфейсом пользователя(UI), то формат передачи данных может быть произвольным. Это xml, json и прочие. В jQuery есть свои UI-формы, но намного удобнее все-же при более-менее сложных интерфейсах работать с ExtJs. При этом не стоит сравнивать эти два фреймворка. Поскольку у них свои задачи. jQuery очень удобен для работы с HTML(оформление, манипуляции, анимация). ExtJS - "заточен" на web-приложения(диалоги, компоненты ввода и отправки данных). Поэтому далее пойдет речь только о ExtJS. Но надо учитывать, что ExtJS намного "тяжелее" jQuery, поэтому не стоит его применять, когда нужно отослать на сервер пару полей.

Все компоненты (ExtJS) при отправке полей на сервер используют несколько свойств. Ну надо отметить, что иерархия тут не очень последовательная. Да и свойства компонентов тоже. Так у компонента есть свойства(properties), методы, события, что ожидаемо. Но также есть и Configs, которые инициализируются в конструкторе или при создании компонента(объекта). Причем есть перекрытие между Configs и остальными. Это как-то непривычно. Ну да ладно... Нас интересует только метод submit, свойства url, baseParams.

  • submit - обычно handler кнопки(buttons). Отправка формы методом POST. Отправляются все items c xtype в которых есть поля ввода(inputs)
  • url - адрес запроса(коннектора)
  • baseParams - тут можно добавлять поля для передачи. Например actions - для указания необходимого процессора
Пример отправки:
   formPanel.getForm().submit({
      url:'/assets/...../test_connector.php'
      ,params:{id:12, name:'Декабрь'}
      ,success:function(form,action){
          Ext.Msg.alert('Все ОК!',action.result.msg);
          win_form.close();
      }
      ,failure:function(form,action){
           switch (action.failureType) {
            case Ext.form.Action.CLIENT_INVALID:
                Ext.Msg.alert('Ошибка!', 'Поля содержат некорректные данные(CLIENT_INVALID)');
                break;
            case Ext.form.Action.CONNECT_FAILURE:
                Ext.Msg.alert('Ошибка!', 'Ошибка связи(CONNECT_FAILURE)');
                break;
            case Ext.form.Action.SERVER_INVALID:
               Ext.Msg.alert('Ошибка!', action.result.msg);
           }
      }
  });

 

Есть разные протоколы обмена данными между формами броузера и сервером. Мы рассмотрим json как самый удобный и распространенный. Если пользоваться процессорами, то получить поля можно методом modx.getProperty(имя_поля). Если написать свой коннектор, тогда поля в $_POST[имя_поля]. Но вернуть надо в строго определенном формате. Т.е. в литеральном json. А литеральном, потому что не знает PHP что такое json. Пример скрипта:

$data=array(
'success'=>true,
'total'=>0,
'results'=>array()
);

$data['total']='2';
$data['results'][]=array('v0'=>0,'v1'=>1);
print json_encode($data);
     

В принципе - все логично. Если б не запутанная иерархия компонентов ExtJS. Поэтому изучая только документацию, тяжело "въехать". Спасает просмотр скриптов расширений в MODX. Можно, конечно, подгрузить MODx(расширение ExtJS). Там все намного проще. Но в целях безопасности это не рекомендуется. Да и многовато будет подключенных файлов. Их там больше десятка.


Комментарии 0






Разрешённые теги: <b><i><br>Добавить новый комментарий: