Пожалуйста!
По поводу нотиса: там действительно косяк. В процессорах внутри функций нет переменной $modx. Есть только $this->modx. То есть правильный кот вот такой (сейчас поправлю в топике):
public function getMenuItems(){ $items = array(); $startId = $this->getProperty('startId'); $level = $this->getProperty('level'); $cacheable = $this->getProperty('cacheable'); $id = $this->getProperty('id', 'menu'); $cacheKey = $this->modx->context->key."/{$id}/{$startId}"; if($cacheable){ if($fromCache = $this->modx->cacheManager->get($cacheKey)){ return $fromCache; } } //else if($items = $this->getItems($startId, $level)){ if($cacheable){ $this->modx->cacheManager->set($cacheKey, $items); } } return $items; }
Как видишь, переменные $id и $startId тоже внутри этой функции объявляются. Так что смотри, чтобы все переменные были объявлены внутри функции (в php же в функциях область видимости — локальная, и если нужна глобальная видимость переменной, то необходимо использовать global для этой переменной, к примеру global $modx).
Спасибо за багрепорт!