Tramp1357 23 августа 2013 0 1
Добрый день! Никто не сталкивался с процессорами Gallery? У нее очень удобная админская часть, но вот с выводом немного узковато. Хотелось бы вывод картинок сделать по своему сценарию. Решил использовать процессоры и не могу понять, как подступиться.

Запускаю в console код

<?php
$response = $modx->runProcessor('mgr/item/getlist', 
array(
    'album' => '1',
),    
 array(
    'processors_path' => $modx->getOption('core_path') . 'components/gallery/processors/'
));
print_r($response->response);


Выдает

Насколько я понимаю, это JSON.
пробую вызвать

print_r($response->response['results']);

и получаю ничего. json_decode тоже не работает. Объясните пожалуйста, в чем проблема, как получить эти results?
1 комментарий
Fi1osof1
Fi1osof 23 августа 2013г в 21:56 #
Как создавать собственные галереи на основе Gallery, я писал здесь.

А по поводу возвращаемого JSON-а: изначально modProcessor::outputArray() возвращает JSON-строку.
public function outputArray(array $array,$count = false) {
    if ($count === false) { $count = count($array); }
    return '{"total":"'.$count.'","results":'.$this->modx->toJSON($array).'}';
}

Но так как мы часто пишем метод process сами, и возвращаем в нем $this->success() или $this->failure(), то $this->outputArray() мы и не замечаем. А вот modObjectGetListProcessor в process() именно его и возвращает.
public function process() {
    $beforeQuery = $this->beforeQuery();
    if ($beforeQuery !== true) {
        return $this->failure($beforeQuery);
    }
    $data = $this->getData();
    $list = $this->iterate($data);
    return $this->outputArray($list,$data['total']);
}


Вот поэтому ты на выходе и получаешь JSON. Перегрузи outputArray и все. Можешь в нем $this->success($msg, $array) вернуть, а можешь сразу массив вернуть, как у меня в getdata-процессорах.
public function outputArray(array $array, $count = false){
        return array(
            'success' => true,
            'message' => $this->getMessage(),
            'count'   => count($array),
            'total'   => $count,
            'object'  => $array,
        );
}
Tramp13571
Tramp1357 23 августа 2013г в 22:05 #
Понятно, спасибо. Сейчас попробую.
Fi1osof1
Fi1osof 23 августа 2013г в 22:06 #
Пожалуйста.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.