MODX - инструмент для доступа к нужным данным из БД
I have a bit of code, it works to get recent posts from Discuss forums in MODX.
<?php
$discuss = $modx->getService('discuss','Discuss',$modx->getOption('discuss.core_path',null,$modx->getOption('core_path').'components/discuss/').'model/discuss/');
if (!($discuss instanceof Discuss)) return true;
$c = $modx->newQuery('disPost');
$c->limit(10);
$c->sortby('createdon', 'DESC');
$posts = $modx->getCollection('disPost', $c);
foreach ($posts as $post) {
$temp = $post->toArray();
$temp['url'] = $post->getUrl();
// call chunks or what you want
$out[] = $modx->getChunk('rowTpl', $temp);
}
return implode("\n", $out);
Это работает, однако его несовершенный. Например, я хочу отфильтровать личные сообщения, и на уровне сообщений это не работает, на уровне сообщений нет частного флага.
Итак, мне нужно захватить потоки, отсортировать приватные данные или нет, а затем взять эти данные и найти сообщения от createon и отсортировать DESC, так что в основном это еще одна процедура перед вызовом db.
У кого-нибудь есть идеи? Любая помощь будет оценена!
1 ответ
Взгляните на модель базы данных. Если в другой таблице есть поле, помечающее сообщения как частные, вы сможете отфильтровать их, используя getCollectionGraph и еще один небольшой параметр для вашего кода.
Я не знаком со схемой базы данных, поэтому следующий код не будет работать [он даже не связан], но дает вам представление о том, что вы должны искать и как объединить связанные таблицы:
if($queryFilters['status_id'] == '' ){$queryFilters['status_id'] = 2;}
$mygroups = $this->getGroupMemberships(); // an array of group ids
$criteria = $this->modx->newQuery('FundRequest');
$criteria->leftJoin('Program','Program');
$criteria->where($queryFilters); // an array('id' => 2, 'uid' => 3) etc..
$criteria->andCondition(array('Program.location_id:IN' => $mygroups));
$criteria->sortby('`FundRequest`.`request_date`','desc');
$fundRequests = $this->modx->getCollectionGraph('FundRequest', '{ "StatusFlag":{}, "PaymentMethod":{}, "Contract":{ "Client": {}, }, "Program": { "Location": {}, "ProgramName": {}, } }', $criteria);
Надеюсь, это даст вам некоторые подсказки.