我试图从Magento的后端找出默认的商店代码。虽然这听起来很简单,但我找不到任何解决方案。
我找到的片段是
Mage::app()->getStore()->getCode()
(虽然这与默认但不是当前商店相对应)或
Mage::app()->getStore(Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID)->getCode();
但是从后端内部这些只返回“admin”(因为后端被视为某种商店ID为0的特殊商店 - 这是DEFAULT_STORE_ID
的值)。有谁可以请我指出从任何地方获取实际默认商店代码的方法? (如果激活了“将存储代码添加到URL”和“自动重定向到基本URL”选项,则由Magento设置的商店代码)
为什么我需要这个:我需要在Magento配置中生成一个URL,如果激活了“向URL添加存储代码”,它仍然有效。我可以设置任何商店代码,所以如果我在其中一个的配置范围内,我可以使用那个。但是,如果配置范围设置为默认或网站,它也必须工作,我想在这种情况下使用默认的商店代码。
提前致谢!
编辑:我找到了一个解决方案:
$websites = Mage::app()->getWebsites();
$code = $websites[1]->getDefaultStore()->getCode();
然而,这给我留下了一些后续问题。
为什么Mage::app()->getWebsite()
会返回仅包含特殊admin
商店的特殊网站对象,而Mage::app()->getWebsites()
将返回仅包含通常前端的数组网站,但不 getWebsite()
返回的对象?
为什么前端网站对象占用数组中的索引1,而索引0未使用?我真的很想知道在那里使用魔数的原因(如果必须的话)。
答案 0 :(得分:8)
简直就是magento中没有默认商店这样的东西。唯一的特殊商店是admin one,所有其他商店在magento中拥有相同的权利。
而Mage :: app() - > getWebsites()将只返回一个数组 包括通常的前端网站,但不包括返回的对象 getWebsite()?
您应该只看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);
,您将获得一系列网站,其中包含指向0的管理员。
答案 1 :(得分:5)
您可以尝试:
Mage::app()->getDefaultStoreView()->getCode();