좋아, 업그레이드 스크립트에서 관리자 저장소를 사용하려면
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
당신의 접근 방식 Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));
이 성공할 수 없습니다. 관리자에게 실제로로드 가능한 storeview가 없습니다.
종종 다음과 같은 패턴을 사용합니다.
// remembering old current store
$currentStore = Mage::app()->getCurrentStore();
// switching to admin store
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
// switching back to old current store
Mage::app()->setCurrentStore($currentStore->getStoreId());
그렇지 않으면 업그레이드 스크립트가 실행 된 후 때때로 방문자가 프런트 엔드 대신 관리자 페이지로 리디렉션됩니다.
최신 정보:
아래 질문을 잘못 해석 했으므로 여기에 새로운 설명을 시도하십시오 ^^
업그레이드 스크립트는 코어의 더 깊은 메소드에서 호출됩니다 (Mage_Core_Model_Resource_Setup::_modifyResourceDb(...)
)의
여기에 스택을 나열하려고했습니다.
Mage_Core_Model_App::run($params)
Mage_Core_Model_App::_initModules()
Mage_Core_Model_Resource_Setup::applyAllUpdates()
Mage_Core_Model_Resource_Setup::applyUpdates()
Mage_Core_Model_Resource_Setup::_upgradeResourceDb($oldVersion, $newVersion)
Mage_Core_Model_Resource_Setup::_modifyResourceDb($actionType, $fromVersion, $toVersion)
이제 살펴보십시오 Mage_Core_model_App::run($params)
:
public function run($params)
{
$options = isset($params['options']) ? $params['options'] : array();
$this->baseInit($options);
Mage::register('application_params', $params);
if ($this->_cache->processRequest()) {
$this->getResponse()->sendResponse();
} else {
$this->_initModules();
$this->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);
if ($this->_config->isLocalConfigLoaded()) {
$scopeCode = isset($params['scope_code']) ? $params['scope_code'] : '';
$scopeType = isset($params['scope_type']) ? $params['scope_type'] : 'store';
$this->_initCurrentStore($scopeCode, $scopeType);
$this->_initRequest();
Mage_Core_Model_Resource_Setup::applyAllDataUpdates();
}
$this->getFrontController()->dispatch();
}
return $this;
}
이 메소드 _initModules()
는 전에 호출 $scopeCode
되고 $scopeType
결정됩니다.
현재 가정 된 폴 백이 정의 된 위치를 알 수 없습니다.