Реализация "модульности" процессоров

Jul 12, 2013

На сайте есть страница пользователя. На ней выводится его профиль, созданные им объявления, его последние заявки и пр. Это все отдельные объекты. Кроме того есть страницы со списками этих объектов «Мои объявления», «Мои заявки». Хотелось бы на любой из страниц делать поменьше запросов. Соответственно, нужны JOIN.

Как я представляю реализацию таких выборок.

Для страницы пользователя есть процессор xpectaProfileGetProcessor, в который передается id пользователя и он выбирает все его данные:

class xpectaProfileGetProcessor extends modObjectGetListProcessor{
    public $classKey = 'modUser';

    public function getData() {
        $c = $this->modx->newQuery($this->classKey);
        $c->where(array('id' => $this->getProperty('id')));
        $c->select(array(
            "{$this->classKey}.*",
        ));
        $data = array();
        if($c->prepare() && $c->stmt->execute()){
            $data = $c->stmt->fetchAll(PDO::FETCH_ASSOC);
        }
        return $data;
    }
    
}

return 'xpectaProfileGetProcessor';

В него я хочу передавать список «модулей», которые нужно запустить. Каждый из них будет выглядеть как-то так:

$c->leftJoin('xpectaAd', 'xpectaAd');

$c->select(array(
    "xpectaAd.id as ad_id",
    'xpectaAd.title as ad_title',
    //...
));

return $c;

И отсюда вопрос, где эти методы лучше хранить? Создать отдельный класс с ними? Или в код класса того или иного объекта вставлять как метод — но тогда их из процессора просто так не вызовешь… А можно прямо в этом процессоре и хранить. Какой вариант предпочтительнее? Или, может это все совсем не так делается?