Сегодня, Саша, мир твой рухнет))) Статью на этот счет почитать я тебе выше написал))
Все правильно сделано. Единственное, просто по синтаксису, проще так: return array( 'id' => $this->object->id, 'username' => $this->object->username, );
Эх, не зря Серега мой лучший ученик :)))
Саш, смотри ниже. И статью смотри, указанную в комментарии. Таким образом ты только увеличишь нагрузку на сервер. Это такие особенности xPDO.
Потому что надо смотреть в сторону методе prepareRow(). Как мы разбирали предметно ранее, xPDOObject::fromArray() выдернет из базы данных все строки объекта, так что $this->object->select() определенных колонок ничего не изменит, но нагрузки на сервер добавит. Надо переопределить этот метод в своем процессоре и вернуть типа return array( 'id' => $this->object->id, 'username' => $this->object->username, );
[18-Feb-2015 09:19:51] PHP Parse error: syntax error, unexpected T_STRING in /core/cache/includes/elements/modsnippet/3.include.cache.php on line 3 Не забывай, что MODX из сниппетов делает функции, и только потом вызывает их. Из-за этого смещениестрочек кода происходит. Смотреть надо именно указанный файл, а не исходный код, то есть /core/cache/includes/elements/modsnippet/3.include.cache.php Там будет примерно такой код: <?php function elements_modsnippet_1($scriptProperties= array()) { global $modx; if (is_array($scriptProperties)) { extract($scriptProperties, EXTR_SKIP); }
я не знаю прав ли я но так просто нельзя сделать… коллекция получает значения с таблицы и забивает ими класс xPDO. т.е. на выходе мы принимает не массив, а объекты конкретного класса… наверное п.с. из консоли не выход getCollection с селектом
это тоже будет работать, но при этом в запрос попадают все поля, и соответственно возрастает нагрузка и потребление памяти. Лучше все-таки до моментаобращения к мерверу правильно настроить select, чтобы в выборку попали только нужные поля.
Странной дело, пока не могу понять public function prepareQueryBeforeCount(xPDOQuery $c){
$c=parent::prepareQueryBeforeCount($c);
$c->select(['modUser.id','modUser.username']);
$c->prepare();
print $c->toSQL();
die;
} возвращает правильный запрос: SELECT modUser.id, modUser.username FROM spmx_users AS modUser а на выходе действительно отдает все поля Array
(
[success] => 1
[total] => 5
[results] => Array
(
[0] => Array
(
[id] => 1
[username] => admin
[password] => P3/gWbTaphPr//hV8djePt1qdcjN5CIxBVKE5tqdJyQ=
[cachepwd] =>
[class_key] => modUser
[active] => 1
[remote_key] =>
[remote_data] =>
[hash_class] => hashing.modPBKDF2
[salt] => b052eb5470a21ff53697a5bf4cb43649
[primary_group] => 1
[session_stale] => Array
(
[1] => spravochniki
[2] => web
)
[sudo] => 1
)
[1] => Array нигде в коде больше $c->select(...) не встречается вплоть до $modx->getCollection. Ничего не понимаю.
ну то что я хотел я получил осталось узнать на сколько все это правильно сделано. class xtestGetUsersProcessor extends modObjectGetListProcessor{ public $classKey = 'modUser'; public $defaultSortDirection = 'ASC'; public $defaultSortField = 'username';
.........
public function prepareRow(xPDOObject $object) {
$objectArray = array();
$objectArray['id'] = $object->get('id');
$objectArray['username'] = $object->get('username');
return $objectArray;
}
} return 'xtestGetUsersProcessor';