Проблема с якорями в OpenCart возникает из-за строчки <base href="<?php echo $base; ?>" /> в файле\catalog\view\theme\*\template\common\header.tpl
Если в остальных движках ее нет и там якорь подставляется автоматически в конец адреса страницы, например, site.ru/page.html#yakor то в OpenCart он подставляется сразу после названия сайта, т.е. site.ru/#yakor Кроме того, как я понял, во многих шаблонах табы, например, в товарах тоже работают по принципу якоря и если использовать стандартный jQuery-код прокрутки к якорю - то они конфликтуют.
Решить можно разными путями - через PHP или JS, но убирать <base href="<?php echo $base; ?>" /> думаю не стоит точно. У меня цель была создать оглавление с плавной прокруткой и т.к. шаблон без JavaScript в принципе не работает, то и нормальный якорь с полным адресом страницы нам не нужен, главное, чтобы работало оглавление и была плавная прокрутка. И чтобы не было конфликта с табами я использовал jQuery который ориентируется на класс, а не на #. Выглядит это так:
<script type="text/javascript" >
$('.anchor').click(function(){
var target = $(this).attr('href');
$('html, body').animate({scrollTop: $(target).offset().top}, 800);
return false;
});
</script >
Сам якорь задается через id:
<h2 id="yakor">Заголовок на который цепляем якорь</h2>
А ссылку на него в оглавлении указываем через <a href> с классом anchor:
<a class="anchor" href="#yakor">Ссылка из оглавления</a>
Если нужно дать ссылку с другой страницы или сайта на нужно место, просто указываете полную ссылку с якорем - это она будет работать по умолчанию, например, http://site.ru/page.html#yakor
На медаль не претендую, но тут такого варианта решения проблемы не нашел - может кому поможет, т.к. смотрю проблема распространенная.