6

Magento のバックエンド内からデフォルトのストア コードを見つけようとしています。これはかなり単純に聞こえますが、解決策が見つかりませんでした。

私が見つけたスニペットは次のいずれかです

Mage::app()->getStore()->getCode()

(ただし、これはデフォルトではなく、現在のストアに対応しています) または

Mage::app()->getStore(Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID)->getCode();

ただし、バックエンド内からは、これらは「admin」のみを返します (バックエンドはストア ID 0 の特別なストアとして扱われるため、これは の値ですDEFAULT_STORE_ID)。どこからでも実際のデフォルト ストア コードを取得する方法を教えてください。(「Add Store Code to URLs」オプションと「Auto-redirect to Base URL」オプションの両方が有効になっている場合に Magento によって設定されるそのストア コード)

これが必要な理由のほんの少しの背景: 「ストアコードを URL に追加」が有効になっている場合でも機能する Magento 構成内で URL を生成する必要があります。任意のストア コードを設定できるので、そのうちの 1 つの構成スコープ内にある場合は、その 1 つをそのまま使用できます。ただし、構成スコープがデフォルトまたはウェブサイトに設定されている場合にも機能する必要があるため、その場合はデフォルトの店舗コードを使用したいと考えています。

私は解決策を見つけました:

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

ただし、これにより、いくつかのフォローアップの質問が残ります。

が特別なストアMage::app()->getWebsite()のみを含む特別な Web サイト オブジェクトを返すのに対し、 は通常のフロントエンド Web サイトのみを含む配列を返し、によって返されるオブジェクトは含まないのはなぜですか?adminMage::app()->getWebsites()getWebsite()

フロントエンド Web サイト オブジェクトが配列のインデックス 1 を占有し、インデックス 0 が使用されないのはなぜですか? そこでマジックナンバーを使用しなければならない理由を本当に知りたいです(必要な場合)。

4

2 に答える 2

8

Magento にはデフォルト ストアのようなものはありません。唯一の特別なストアは管理ストアです。他のすべてのストアは、Magento で同じ権利を持ちます。

[...] Mage::app()->getWebsites() は通常のフロントエンド Web サイトのみを含む配列を返しますが、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 に答える