Наверняка многие слышали о «классных» процессорах, но не каждый знает о том, какие фишки в них есть.
Вот небольшой пример того, как в процессоре можно «переключиться» на другой процессор, а точнее вернуть инстанс другого выполняемого процессора.
// Запросы из браузера идут на один и тот же коннектор (и потом на процессор), чтобы получить список компаний или сотрудников компаний
// Процессор-свитч в файле процессора
class CompaniesUsersGetListProcessor extends modProcessor{
// Статический метод процессора, который может подменить выполняемый процессор
public static function getInstance(modX &$modx,$className,$properties = array()) {
switch($properties['type']){
// Если тип - company, то подгружаем другой класс, который сформирует список пользователей
case 'company':
$className = require_once dirname(__FILE__).'/users/getlist.class.php';
break;
default:
// Если запрашиваемый раздел - корень - выполняем процессор списка компаний
if($properties['id'] == 'root'){
$className = 'CompaniesGetListProcessor';
}
}
// Возвращаем инстанс актуального процессора
// Если $className не перегрузили, то возвращается инстанс текущего класса и
в результате выполнится его метод process(), который вернет ошибку
return new $className($modx, $properties);
}
public function process() {
return $this->failure('Неверные данные');
}
}