Хлебные крошки формируются в /api/php/core.php функцией static function getBreadcrumb ( $table, $category)
Функция принимает два параметра - имя таблицы где рекурсивно ищем путь и ИД текущей категории (из товара, категории товаров, в админке аналогично)
В результате функция рекурсивно проходит таблицу вложенных категорий пока не найдет нулевое вложение и формирует рекурсивный двух мерный массив с ИД и названием категории
Вызов из модуля товара:
$smarty->assign('Breadcrumb', \core::getBreadcrumb( 'tovar_category', $page[0]['category'] ) );
где последний параметр - категория в которой находится товар.
Вывод в шаблон:
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Главная</a></li>
<li class="breadcrumb-item"><a href="/tovat_cat/1-0.html">Каталог</a></li>
{section name=customer loop=$Breadcrumb}{if ($Breadcrumb[customer].id && $Breadcrumb[customer].id!=$smarty.get.id)}
<li class="breadcrumb-item"><a href="/tovar_cat/{$Breadcrumb[customer].id}-0.html">{$Breadcrumb[customer].title}</a></li>
{/if}{/section}
<li class="breadcrumb-item active" aria-current="page">{$page[0].title|substr:70}</li>
</ol>
</nav>