This is an old revision of the document!
Интернет-магазин привязывается к определенному узлу структуры, это сделано для того, чтобы была возможность формировать ссылки на товары и группы вне этой структуры, например, в подборках на главной странице. Поэтому если создать еще одну структуру и указать интернет-магазин, привязанный к другой структуре, то при обращении к новой структуре будем получать ошибку 404.
Иногда требуется именно такое поведение, чтобы протестировать выборку магазина на отдельном тестовом URL с измененными шаблонами, макетом и ТДС, при этом оставляя без изменения оригинальный магазин. Добиться такого поведения возможно с помощью нижеследующего кода, который необходимо разместить в ТДС перед вызовом метода parseUrl.
// Подменяем путь магазина для парсинга URL $Shop_Controller_Show->pattern = rawurldecode(Core_Str::rtrimUri(Core_Page::instance()->structure->getPath())) . '({path}/)(user-{user}/)(page-{page}/)(tag/{tag}/)(producer-{producer}/)'; // Подменяем URL для групп и товаров $substituteUrls = function ($oShopObject) { $oShopObject ->addForbiddenTag('url') ->addEntity( Core::factory('Core_Xml_Entity') ->name('url') ->value( Core_Page::instance()->structure->getPath() . $oShopObject->getPath() ) ); }; Core_Event::attach('shop_group.onBeforeRedeclaredGetXml', $substituteUrls); Core_Event::attach('shop_item.onBeforeRedeclaredGetXml', $substituteUrls);
Код актуален для HostCMS 6.7.7+, в предыдущих версиях отличается pattern, исходное его значение можно посмотреть в конструкторе контроллера, подмена URL для товаров и групп доступна с версии 6.6.3.