Может, я невнимательно прочитал ветку, но исключение родителя из адреса можно легко сделать без изменений в ядре, плагином на 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.