6

我正在尝试从 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”被激活,该 URL 仍然有效。我可以设置任何商店代码,所以如果我在其中一个的配置范围内,我可以使用那个。但是如果配置范围设置为默认或网站,它也必须工作,所以我想在这种情况下使用默认的商店代码。

我找到了一个解决方案:

$websites = Mage::app()->getWebsites();
$code = $websites[1]->getDefaultStore()->getCode();

但是,这给我留下了一些后续问题。

为什么Mage::app()->getWebsite()返回一个只包含特殊admin商店的特殊网站对象,而返回一个包含通常前端网站Mage::app()->getWebsites()的数组,而不是返回的对象?getWebsite()

为什么前端网站对象在数组中占用索引 1,而索引 0 未使用?我真的很想知道必须在那里使用幻数的原因(如果必须的话)。

4

2 回答 2

8

Magento 中没有默认存储。唯一的特殊商店是管理员商店;所有其他商店在 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。

于 2012-09-27T20:52:27.923 回答
5

你可以试试:

Mage::app()->getDefaultStoreView()->getCode();
于 2016-02-03T12:51:46.293 回答