Размещение интернет-магазина по новому адресу

Интернет-магазин в HostCMS привязывается к определенному узлу структуры, это сделано для того, чтобы была возможность формировать ссылки на товары и группы вне этой структуры, например, в подборках на главной странице. Поэтому если создать еще одну структуру и указать интернет-магазин, привязанный к другой структуре, то при обращении к новой структуре будем получать ошибку 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 для групп и товаров
function substituteUrls($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.

comments powered by Disqus


Следующий "Как скрыть панели для управляющих блоков контроллера в HostCMS" К списку Предыдущий "Изменение цен с 1 марта 2018 года"