如何在Magento后端获取默认的Store代码


How to get the default Store code within the Magento backend

我正试图从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();