Обработка json в компоненте modx
Решил я, что разумно и правильно хранить часть данных в строке json. Ну т.е. в таблице что-то типа
В json переводится что-то типа этого:
Я так понимаю, что гирд я должен составить из хранилища как-то так habrahabr.ru/post/108154/ а уже обработку делать через процессоры… Или…
Может в каких-то компонентах информация хранится в таком формате и можно посмотреть пример? Или кто может какую статью в тему там подкинуть? Пинните в нужном направлении.
<field key="field_name" dbtype="text" phptype="string" />
И некий массив отправляется в $modx->toJSON() и сохраняется в field_name. Там список строк, состоящий из месяца, года и произвольного текста.В json переводится что-то типа этого:
[0] => Array
(
['time'] => 1999
['mounth'] => 1
['text'] => 'Текст'
),
[1] => Array
(
['time'] => 2001
['mounth'] => 8
['text'] => 'Текст 2'
),
Но нужно как-то наладить управление ими в компоненте, составить гирд из json. Вроде бы ext.js берется json и отдается store и на основе его создается гирд и все дела. В modExt есть волшебные url и action, которые позволяют не писать store. Но ведь в конечном счете тоже используется json?Я так понимаю, что гирд я должен составить из хранилища как-то так habrahabr.ru/post/108154/ а уже обработку делать через процессоры… Или…
Может в каких-то компонентах информация хранится в таком формате и можно посмотреть пример? Или кто может какую статью в тему там подкинуть? Пинните в нужном направлении.
Комментарии: 5
Я тебе могу много статей подкинуть — bezumkin.ru/training/course1/
Ну там тоже через магический url и action, которые творят необъяснимое волшебство? Коннектор отдает json-массив с данными для грида. Но всё дело в том, что одно из возвращаемых полей — тоже json и из него нужно собрать отдельный грид в окошке редактирования.
Я проходил курс, даже заплатить успел перед тем, как он стал бесплатный )
Я так понимаю, нужно 'success' => true, и в 'data' наш массив и это все скармливать хранишищу. Но наверно сделаю по-другому, через не классный процессор.
Я проходил курс, даже заплатить успел перед тем, как он стал бесплатный )
$array = array(
'success' => false,
'message' => 'Возника ошибка при сохранении формы',
'total' => 1
'data' => array(
'id' => 'alias',
'msg' => 'Это поле обязательно'
)
);
bezumkin.ru/training/course1/2166/Я так понимаю, нужно 'success' => true, и в 'data' наш массив и это все скармливать хранишищу. Но наверно сделаю по-другому, через не классный процессор.
ExtJs генерирует всё оформление самостоятельно, а от процессора получает только массив данных в определенном формате.
Все гриды MODX наследуются от одного основного и именно в нём прописан разбор данных. Вот метод, который создаёт хранилище из полученного JSON.
В общем, от процессора особо ничего не зависит, «классный» он, не «классный» — не важно, лишь бы отдал JSON с нужной структурой данных.
В modExt есть волшебные url и action, которые позволяют не писать store.Url и action не делают никакой магии, они только указывают какой вызвать процессор, чтобы он отдал данные в виде JSON. Store у grid есть всегда, другое дело, что ты этого не всегда видишь.
Все гриды MODX наследуются от одного основного и именно в нём прописан разбор данных. Вот метод, который создаёт хранилище из полученного JSON.
В общем, от процессора особо ничего не зависит, «классный» он, не «классный» — не важно, лишь бы отдал JSON с нужной структурой данных.
В классных процессорах нужно идти в родительский класс и что-то переопределять там. С ними удобно, когда нужно обрабатывать конкретный, описанный в модели объект, а со строчкой json как-то не очевидно, как их применять.
Обычный нагляднее как-то и строк всего-ничего. Может это и не кошерно.
Только с get такой фокус не проходит. Я пробовал отправлять ему массив, подобный тому, что приходит от других get, подобный тому. Но что-то не проходит.
В старом MS вроде вообще ошибка возвращается. В Шопкипере вроде все также, через outputArray, но я не смотрел, где там этот процессор используется. Посмотрю еще на другие компоненты, может вдохновлюсь и скопипостю. А нет — буду с классным modObjectGetProcessor извращаться, вроде хорошо получалось ).
Обычный нагляднее как-то и строк всего-ничего. Может это и не кошерно.
if(empty($_REQUEST['expertID']))
return $modx->error->failure($modx->lexicon('travel_list_no_expert_id'));
$expert = $modx->getObject('OrderExpert',(int) $_REQUEST['expertID']);
$arr = $modx->fromJSON($expert->get('travel_list'));
foreach($arr as $k=>$v){
$arr[$k]['key'] = $k;
}
if(empty($arr))
return $modx->error->failure($modx->lexicon('travel_list_no_date'));
return $this->outputArray($arr,count($arr));
Я тут вывожу fromJSON, а потом outputArray опять в json. Ну, так как-то удобнее и более напоминает другие, легче ориентироваться.Только с get такой фокус не проходит. Я пробовал отправлять ему массив, подобный тому, что приходит от других get, подобный тому. Но что-то не проходит.
В старом MS вроде вообще ошибка возвращается. В Шопкипере вроде все также, через outputArray, но я не смотрел, где там этот процессор используется. Посмотрю еще на другие компоненты, может вдохновлюсь и скопипостю. А нет — буду с классным modObjectGetProcessor извращаться, вроде хорошо получалось ).
Любой JSON делается так:
$array = array('key1' => 'value1', 'key2' => 'value2');
echo json_encode($array);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.