private:koding:hostcms:modules:shop:useful:substitute_shop_path

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

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

private/koding/hostcms/modules/shop/useful/substitute_shop_path.txt · Last modified: 10.07.18 в 12:24 by maximzasorin_gmail.com