magento支援多店鋪,但是,即便如此,如果你的擴充沒考慮多店鋪,結果你的系統也隻能支援單店鋪。
支援多店鋪的開發一般就是遵循一些基本原則:
1.查詢那些和店鋪有關的資料,必須加入store過濾
2.存儲店鋪有關的資料,必須指定store
ii. 查詢相關店鋪相關的資料例:
1. 前端查詢某目前店鋪下的所有産品資料:
$collection = mage::getmodel('catalog/product')->getcollection();//預設裝載目前店鋪下的産品
如果想查詢指定店鋪下的産品,需明确指定店鋪id,在前面代碼基礎上增加:
$collection = $collection->setstoreid(3); // 3為某店鋪id
2. 前端裝載目前店鋪的某個産品
$prd = mage::getmodel('catalog/product')->load(112); // 112是産品的id
這裡不用指定店鋪id,預設轉載目前店鋪的資料,如果明确載入某個店鋪下的産品,應在load之前指定店鋪id
$prd->setstoreid(3); // 店鋪id号
3. 前端查詢某目前店鋪下的所有分類資料
與裝載産品非常類似
$collection = mage::getmodel('catalog/category')->getcollection(); //預設裝載目前店鋪的所有分類。
如果指定要裝載某個店鋪下的分類,增加如下代碼:
$collection = $collection->setstoreid(3); // 3為店鋪id
4. 前端裝載一個category
$model = mage::getmodel('catalog/category')->load(12); // 12是分類的id
這裡不用指定店鋪id,預設轉載目前店鋪的資料,如果明确載入某個店鋪下的分類,應在load之前指定店鋪id
$model->setstoreid(3); // 店鋪id号
5. 前端獲得配置資料
當然,首先要知道你所要檢索的配置資料path,同前極類似:
mage::getstoreconfig('cartz/configuration/brand_root'); //裝載目前店鋪下的資料
以下代碼達到同樣效果
mage::getstoreconfig('cartz/configuration/brand_root', mage::app()->getstore()->getid());
第二個參數mage::app()->getstore()->getid()即為目前店鋪id
如果想獲得某個店鋪下的配置,需明确指定店鋪id.
mage::getstoreconfig('cartz/configuration/brand_root', 3); //3為某店鋪id.
ii. 背景店鋪相關的資料管理存儲:
一旦你建立了多個店鋪,你就會發現在很多頁面都有一個store switcher:
你如果也想讓自己的背景頁面有一個這樣的swithcer,可以在合适的地方調用這個block,比如,在你的controller的action方法中加入下面的代碼
if (!mage::app()->issinglestoremode()) {
$this->_addleft($this->getlayout()->createblock('store_switcher'));
}
就可以實作上述目的。有了這個基礎友善接下來店鋪資料切換。比如,當切換到某一個店鋪時,加載該店鋪下的單個或者多個産品時,别忘記根據switcher傳入的store參數值正确調用setstoreid。
源文:http://koda.javaeye.com/blog/651918