Если известен user friendly URL, из него можно выделить псевдоним, то есть alias. Потом можно обратиться к базе данных, к таблице site_content, и по alias определить id.
Такую задачу я когда-то решал. Правда, тогда вот задумался, как будет рузруливаться ситуация, если c заданным алиасом будет больше одного документа? Такое возможно, при использовании вложеных урлов. Какой из id вернётся? Первый по счёту? — А правильно ли это?
Вот кусочек того кода:
<?php
function is_validAlias($alias, $parents) {
global $modx;
$aliases = array();
$folders = explode(",", $parents);
foreach($folders as $folder)
{
$Ids = $modx->getChildIds($folder, 1);
foreach ($Ids as $id)
{
$Alias = $modx->getPageInfo($id, 1, 'alias');
$aliases[] = $Alias['alias'];
}
}
return in_array($alias, $aliases);
}
$app_rname = (isset($_GET['app']) && (!empty($_GET['app'])) && is_validAlias($_GET['app'], '2,4,8')) ? $_GET['app'] : '';
if (isset($app_rname))
{
$app_page = $modx->getDocumentObject('alias', $app_rname); // !!
$app_page_id = $app_info['id'];
}
?>
Внимание! Отмеченная двумая восклицательными знаками строка (предпоследняя), моментально выведет страницу 404 если алиас $app_rname не существует в дереве документов, поэтому, выше добавлена функция is_validAlias() проверяющая существование чилдрена с алиасом $alias у кого нибудь из перечисления $parents.
Надесь, это всё хоть кому нибудь пригодится. И так же, жду ответа на вопрос, ради которого всё это и вывалил