Magento - 在后端获取默认商店代码

Mar*_*der 6 php magento magento-1.x

我试图从Magento的后端找到默认的商店代码.虽然这听起来很简单,但我找不到任何解决方案.

我找到的片段也是

Mage::app()->getStore()->getCode()
Run Code Online (Sandbox Code Playgroud)

(虽然这不符合默认值但对应当前商店)或

Mage::app()->getStore(Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID)->getCode();
Run Code Online (Sandbox Code Playgroud)

但是从后端内部这些只返回"admin"(因为后端被视为某种特殊商店,商店ID为0 - 这是值DEFAULT_STORE_ID).有谁可以请我指出从任何地方获取实际默认商店代码的方法?(由Magento的设置如果"添加商店代码到URL"和"自动重定向到基本URL"选项被激活,那家商店代码)

我只需要一些背景知识:我需要在Magento配置中生成一个URL,如果激活了"向URL添加存储代码",它仍然有效.我可以设置任何商店代码,所以如果我在其中一个的配置范围内,我可以使用那个.但是,如果配置范围设置为默认或网站,它也必须工作,我想在这种情况下使用默认的商店代码.

提前致谢!

编辑:我找到了一个解决方案:

$websites = Mage::app()->getWebsites();
$code = $websites[1]->getDefaultStore()->getCode();
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dmy*_*kin 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;
}
Run Code Online (Sandbox Code Playgroud)

所以,如果你打电话$websites = Mage::app()->getWebsites(true);,你会得到一系列网站,其中一个网站的索引为0.


小智 5

你可以尝试:

Mage::app()->getDefaultStoreView()->getCode();
Run Code Online (Sandbox Code Playgroud)