【发布时间】:2015-06-03 09:59:17
【问题描述】:
我正在尝试获取不同商店视图的类别页面的页面 URL 密钥。基本上我在 Magento 安装中设置了 3 家商店。现在我想在我的类别页面中实现 hrefhang 标签。 但是当我在默认商店时,我无法访问其他商店视图的类别 URL 键,反之亦然。
我有从中获得的类别对象,
$category = Mage::registry('current_category');
有什么想法吗?
【问题讨论】:
我正在尝试获取不同商店视图的类别页面的页面 URL 密钥。基本上我在 Magento 安装中设置了 3 家商店。现在我想在我的类别页面中实现 hrefhang 标签。 但是当我在默认商店时,我无法访问其他商店视图的类别 URL 键,反之亦然。
我有从中获得的类别对象,
$category = Mage::registry('current_category');
有什么想法吗?
【问题讨论】:
似乎在与当前商店不同的商店下获取类别 URL 的最佳方法是 make use of Magento’s Mage_Core_Model_App_Emulation。以下是您如何做到这一点的示例:
/**
* @var $categoryId - The numeric category ID you want to get the URL of.
* @var $altStoreId - The numeric ID of the other store view to get the URL from.
*/
$env = Mage::getSingleton('core/app_emulation')->startEnvironmentEmulation($altStoreId);
$category = Mage::getModel('catalog/category')->load($categoryId);
$altUrl = $category->getUrl();
Mage::getSingleton('core/app_emulation')->stopEnvironmentEmulation($env);
【讨论】:
我的解决方案,效果很好
/**
* @var $store_id - The numeric ID of the store view to get the URL from.
* @var $store_url - Base URL of the store
*/
$store_url = Mage::app()->getStore($store_id)
->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK);
$objcategory = Mage::registry('current_category');
$categoryId = $objcategory->getId();
$caturlkey = Mage::getModel('catalog/category')
->setStoreId($store_id)->load($categoryId)->getUrlKey();
$altUrl = $store_url.$caturlkey;
【讨论】:
您可以像这样执行(在环境仿真时成本应该更低):
$currentStore = Mage::app()->getStore();
Mage::app()->setCurrentStore(Mage::app()->getStore($yourAltStoreId));
$categoryLink = Mage::getModel('catalog/category')->load($yourCategoryId)->getUrl();
Mage::app()->setCurrentStore($currentStore);
【讨论】: