Обработка 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);            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.