Можно попробовать хуком вставить хлебные крошки. Я тут соорудил жесточайший костыль, вроде работает. Родительские записи внизу страницы, их две. В хлебные крошки добавлен только один родитель.
Ну а вот с вставкой в url родителя сложнее. Собрать url можно, но как по этому новому адресу открыть страницу, чтобы она открылась, фиг его знает. Может кто подскажет.
В общем, примерно всё было так:
В папке system/controllers создаем папку apib, внутри создаем файл frontend.php с таким содержимым:
<?php class apib extends cmsFrontend{}
Там же создаем папку hooks, а внутри файл core_start.php с таким содержимым:
<?php class onApibCoreStart extends cmsAction {
public function run(){
$url = $_SERVER['REQUEST_URI'];
$url = $url[0];
if (strrpos($url, '.html') === false) { return true; }
error_reporting(E_NOTICE); // В этом месте почему-то вываливает кучу нотисов - не видит языковые константы
$model = cmsCore::getModel('content');
$fields = $model->getContentFields($url_ex[1]);
$p_ctype = [];
foreach ($fields as $field) {
if (stripos($field['name'], 'parent_') === false && strrpos($field['name'], '_id') === false) { continue; } $p_ctype[] = str_replace(['parent_', '_id'], '', $field['name']);
}
if (!$p_ctype) { return true; }
$p_ctype = $p_ctype[0];
$item = $model->getItemByField('con_'.$url_ex[1], 'slug', str_replace('.html', '', $url_ex[2]));
if (empty($item['parent_'.$p_ctype.'_id'])) { return true; }
$parents = $item['parent_'.$p_ctype.'_id'];
$parents_ex = explode(',', $parents); $parent_id = $parents_ex['0'];
if (empty($parent_id)) { return true; }
$parent_item = $model->getContentItem($p_ctype, $parent_id);
if (!$parent_item) { return true; }
$pc_url = href_to($p_ctype);
$pc = $model->getContentTypeByName($p_ctype);
$pc_title = $pc['title'];
cmsTemplate::getInstance()->addBreadcrumb($pc_title, $pc_url);
$p_url = href_to($p_ctype, $parent_item['slug'].'.html');
$p_title = $parent_item['title'];
cmsTemplate::getInstance()->addBreadcrumb($p_title, $p_url);
return true;
}
}
И надо обновить события в админке.