我正试图从Magento的后端找到默认的存储代码。虽然这听起来很简单,但我就是找不到任何解决方案。
我发现的片段要么是
Mage::app()->getStore()->getCode()
(尽管这与默认商店不对应,但与当前商店相对应)或
Mage::app()->getStore(Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID)->getCode();
但从后端来看,这些只会返回"0";管理员";(因为后端被视为某种特殊的存储,存储ID为0,这是DEFAULT_STORE_ID
的值)。有人能告诉我一种从任何地方获取实际默认商店代码的方法吗?(如果"将存储代码添加到URL"answers"自动重定向到基本URL"选项都被激活,则由Magento设置的存储代码)
只是我需要这个的一点背景:我需要在Magento配置中生成一个仍然有效的URL,如果";将存储代码添加到URL";被激活。我可以设置任何存储代码,所以如果我在其中一个的配置范围内,我就可以使用那个。但由于如果配置范围设置为默认或网站,它也必须工作,因此我希望在这种情况下使用默认的商店代码。
我找到了一个解决方案:
$websites = Mage::app()->getWebsites();
$code = $websites[1]->getDefaultStore()->getCode();
然而,这给我留下了一些后续问题。
为什么Mage::app()->getWebsite()
返回一个只包含特殊admin
存储的特殊网站对象,而Mage::app()->getWebsites()
会返回一个只包含通常前端网站的数组,而不getWebsite()
返回的对象?
为什么前端网站对象占用数组中的索引1,而索引0未使用?我真的很想知道为什么必须在那里使用一个神奇的数字(如果必须的话)。
在Magento中没有默认存储。唯一的特别商店是行政商店;所有其他商店在Magento拥有相同的权利。
[…]而Mage::app()->getWebsites()将返回一个数组包括通常的前端网站,但不包括获取网站()?
你应该看看Mage_Core_Model_App::getWebsites()
的源代码:
public function getWebsites($withDefault = false, $codeKey = false)
{
$websites = array();
if (is_array($this->_websites)) {
foreach ($this->_websites as $website) {
if (!$withDefault && $website->getId() == 0) {
continue;
}
//...
}
}
return $websites;
}
如果你调用$websites = Mage::app()->getWebsites(true);
,你会得到一组网站,admin位于索引0。
您可以尝试:
Mage::app()->getDefaultStoreView()->getCode();