Может, я невнимательно прочитал ветку, но исключен

Jan 25, 2019

Может, я невнимательно прочитал ветку, но исключение родителя из адреса можно легко сделать без изменений в ядре, плагином на OnDocFormSave. Немного сумбурно, но все же:

<?php
if ($modx->event->name == 'OnDocFormSave') {
    $depth = 4;
    $parent = 2;
    $id = $resource->get('id');

    //Если у ресурса уже стоит галочка на перезапись alias-а, выходим
    if ($resource->get('uri_override') == 1) return;

    $docParent = $resource->get('parent');
    $parentIds = $modx->getParentIds($id, $depth, array('context' => 'web'));
    
    if (count($parentIds) == 0 && $docParent != $parent) $parentIds = $modx->getParentIds($docParent, $depth, array('context' => 'web'));
    elseif ($docParent == $parent) $parentIds[] = $parent;
    
    //Если сохраняется документ не из нужной нам ветки $parent, выходим    
    if (!in_array($parent, $parentIds)) return ;
    
    $alias = str_replace($modx->makeUrl($parent), '', $modx->makeUrl($id));
    
    $resource->set('uri', $alias);
    $resource->set('uri_override', true);
    $resource->save();
}

В этом примере исключаем алиас родителя с id=2 на вложенности до 4 уровней в ветке. Соответственно, если нужно исключать на большей вложенности, увеличиваем $depth, а если нужно исключать несколько родителей, это несложно переделать на массив с нужными id.