Пожалуйста! По поводу нотиса: там действительно ко

Пожалуйста!

По поводу нотиса: там действительно косяк. В процессорах внутри функций нет переменной $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).

Спасибо за багрепорт!