В /modules/shop/item/ создать папку observer. Внутри этой папки создать файл updateredirect.php и поместить в него следующее содержимое:
class Shop_Item_Observer_Updateredirect { static public function onAfterChangeActive($object) { if($object->active == 1) { self::deleteRedirectItem($object); } else { self::addRedirectItem($object); } } static public function addRedirectItem($object) { $sShopGroupId = $object->shop_group_id; $oShopGroup = Core_Entity::factory('Shop_Group', $sShopGroupId); if($sShopGroupId != 0) { $sOldPath = $oShopGroup->path . "/" . $object->path . "/"; $sNewPath = $oShopGroup->path . "/"; } else { $sOldPath = $object->path . "/"; $sNewPath = ""; } while($oShopGroup->parent_id != 0) { $oShopGroup = Core_Entity::factory('Shop_Group', $oShopGroup->parent_id); $sOldPath = $oShopGroup->path . "/" . $sOldPath; $sNewPath = $oShopGroup->path . "/" . $sNewPath; } $sOldPath = "{prefix}/shop/" . $sOldPath; $sNewPath = "{prefix}/shop/" . $sNewPath; $oHostcms_Redirect = Core_Entity::factory('Hostcms_Redirect'); $oHostcms_Redirect->site_id = CURRENT_SITE; $oHostcms_Redirect->name = "temporarily_" . $object->id; $oHostcms_Redirect->source = $sOldPath; $oHostcms_Redirect->destination = $sNewPath; $oHostcms_Redirect->type = "302"; $oHostcms_Redirect->save(); } static public function deleteRedirectItem($object) { $oHostcms_Redirect = Core_Entity::factory('Hostcms_Redirect'); $sShopItemId = $object->id; $oHostcms_Redirect ->queryBuilder() ->where('name', '=', 'temporarily_' . $sShopItemId); $aoHostcms_Redirect = $oHostcms_Redirect->findAll(); if(count($aoHostcms_Redirect)) { $aoHostcms_Redirect[0]->delete(); } } }
В /modules/shop/group/ создать папку observer. Внутри этой папки создать файл updateredirect.php и поместить в него следующее содержимое:
class Shop_Group_Observer_Updateredirect { static public function onAfterChangeActive($object) { if($object->active == 1) { self::deleteRedirectGroup($object); } else { self::addRedirectGroup($object); } } static public function addRedirectGroup($oShopGroup) { $sShopGroupId = $oShopGroup->id; $sOldPath = $oShopGroup->path . "/"; $sNewPath = ""; while($oShopGroup->parent_id != 0) { $oShopGroup = Core_Entity::factory('Shop_Group', $oShopGroup->parent_id); $sOldPath = $oShopGroup->path . "/" . $sOldPath; $sNewPath = $oShopGroup->path . "/" . $sNewPath; } $sOldPath = "{prefix}/shop/" . $sOldPath; $sNewPath = "{prefix}/shop/" . $sNewPath; $oHostcms_Redirect = Core_Entity::factory('Hostcms_Redirect'); $oHostcms_Redirect->site_id = CURRENT_SITE; $oHostcms_Redirect->name = "temporarily_" . $sShopGroupId; $oHostcms_Redirect->source = $sOldPath; $oHostcms_Redirect->destination = $sNewPath; $oHostcms_Redirect->type = "302"; $oHostcms_Redirect->save(); } static public function deleteRedirectGroup($oShopGroup) { $oHostcms_Redirect = Core_Entity::factory('Hostcms_Redirect'); $sShopGroupId = $oShopGroup->id; $oHostcms_Redirect ->queryBuilder() ->where('name', '=', 'temporarily_' . $sShopGroupId); $aoHostcms_Redirect = $oHostcms_Redirect->findAll(); if(count($aoHostcms_Redirect)) { $aoHostcms_Redirect[0]->delete(); } } }
В файл bootstrap.php добавить следующий код:
Core_Event::attach('shop_item.onAfterMarkDeleted', array('Shop_Item_Observer_Updateredirect', 'addRedirectItem')); Core_Event::attach('shop_item.onAfterUndelete', array('Shop_Item_Observer_Updateredirect', 'deleteRedirectItem')); Core_Event::attach('shop_item.onAfterChangeActive', array('Shop_Item_Observer_Updateredirect', 'onAfterChangeActive')); Core_Event::attach('shop_group.onAfterMarkDeleted', array('Shop_Group_Observer_Updateredirect', 'addRedirectGroup')); Core_Event::attach('shop_group.onAfterUndelete', array('Shop_Group_Observer_Updateredirect', 'deleteRedirectGroup')); Core_Event::attach('shop_group.onAfterChangeActive', array('Shop_Group_Observer_Updateredirect', 'onAfterChangeActive'));
Теперь после удаления в корзину или изменения активности товара или группы, в модуле "Управление редиректами" будут создаваться редиректы. При восстановлении из корзины удаляться. После удаления товара из корзины, редиректы остаются.
Страницу создал Константин Сериков 14.06.17 в 10:12