Для начала разберемся чем объекты в UMI.CMS отличаются от страниц и почему у них разные ID? Объекты - это основные сущности с которыми работает CMS. Объекты могут быть разных типов и иметь различные свойства. Страницы это расширенные объекты, которые являются частью структуры сайта. Можно сказать, что страница - это некая надстройка над объектом, которая позволяет управлять его положением и состоянием в дереве сайта.
public function getPageByObjectId($object_id) {
$hierarchy = umiHierarchy::getInstance();
$arrPages = $hierarchy->getObjectInstances($object_id);
if (isset($arrPages[0])) {
$page_id = $arrPages[0];
$page = $hierarchy->getElement($page_id);
if (!$page instanceof iUmiHierarchyElement) return '';
return $page_id;
}
else return '';
}
Теперь появляется следующий вопрос: почему мы получаем массив страниц для одного объекта? Чаще всего в этом массиве будет всего один нулевой член, т.е. одному объекту будет соответствовать одна страница. Но возможны частные случаи, например страницы - виртуальные копии, будут использовать в качестве источника данных один объект. По логике - страница-оригинал должна оказаться в начале массива и наш макрос будет работать правильно в любом варианте.