Magento存储配置自定义模块安装期间的奇怪行为
在Magento中安装自定义模块期间,是否存在访问存储配置的限制?问题就在这里 我有一个安装脚本:Magento存储配置自定义模块安装期间的奇怪行为,magento,module,Magento,Module,在Magento中安装自定义模块期间,是否存在访问存储配置的限制?问题就在这里 我有一个安装脚本: <?php $installer = $this; $installer->startSetup(); $installer->run(" DROP TABLE IF EXISTS {$this->getTable('userpaymentban')}; CREATE TABLE IF NOT EXISTS {$this-&
<?php
$installer = $this;
$installer->startSetup();
$installer->run("
DROP TABLE IF EXISTS {$this->getTable('userpaymentban')};
CREATE TABLE IF NOT EXISTS {$this->getTable('userpaymentban')} (
`ban_id` INT NOT NULL AUTO_INCREMENT ,
`user_id` INT NOT NULL ,
`paymentmethod_id` VARCHAR(200) NOT NULL ,
`store_id` INT NOT NULL ,
PRIMARY KEY (`ban_id`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;");
$defaultNotBannedPaymentMethods = array();
$paymentMethods = Mage::getSingleton('payment/config')->getAllMethods();
在代码中的Mage\u Payment\u Model\u Config
中引发了异常:
public function getAllMethods($store=null)
{
$methods = array();
$config = Mage::getStoreConfig('payment', $store);
echo "<pre>";
var_dump($config);
echo "</pre>";
foreach ($config as $code => $methodConfig) {
$data = $this->_getMethod($code, $methodConfig);
if (false !== $data) {
$methods[$code] = $data;
}
}
return $methods;
}
公共函数getAllMethods($store=null)
{
$methods=array();
$config=Mage::getStoreConfig('payment',$store);
回声“;
变量转储($config);
回声“;
foreach($config as$code=>$methodConfig){
$data=$this->\u getMethod($code,$methodConfig);
if(false!==$data){
$methods[$code]=$data;
}
}
返回$methods;
}
正如您所看到的,我已经添加了一些调试代码,但是我从中得到的只是NULL
我的Magento还可以(我想),因为当我在模块安装范围之外使用
Mage::getSingleton('payment/config')->getAllMethods()
(在导入了app/Mage.php
的文件中)时,我收到了一个很好的所有支付方法的列表。Ha,我一直在寻找理由证明我的Magento U学生可以使用数据安装/升级脚本,这是另一个很好的例子
如果查看初始化过程(从index.php
中的Mage::run()
开始),您将很快到达Mage\u Core\u Model\u App::run()
。在那里,您将看到对\u initModules()
的调用。正是通过这种方法运行“常规”安装/升级脚本(通过Mage\u Core\u Model\u Resource\u Setup::applyAllUpdates()
)。稍后在Mage\u Core\u Model\u App::run()
中调用Mage\u Core\u Model\u Resource\u Setup::applyAllDataUpdates()
。这是运行数据安装/数据升级脚本的地方,在通过\u initCurrentStore()
初始化存储对象之后
这似乎就是所谓的数据脚本的目的——您在加载配置的情况下获得store对象
这些脚本与“常规”安装/升级脚本一样运行/命名,唯一的区别是文件名是
mysql4 data-[install | upgrade]-[version(s)]。php
用于CE<1.6和EE<1.11。对于1.6/1.11及更高版本,数据脚本会丢失mysql4前缀,并被放在模块目录下的data
文件夹中(例如,请参见Mage_Catalog
dir)。Ah,这个答案救了我一命。在配置模型中挖掘了大约15分钟,试图找到这个#Benmarks ForctToWhat如果我要添加新的数据升级脚本?我应该增加config.xml中文件的版本和版本号吗?我已经添加了data/{module\u name}\u setup/data-upgrade-0.1.8-0.1.9.php(这是模块的递增版本号),并将config.xml中的版本号更新为0.1.9,清除了缓存,脚本没有执行。有什么想法吗Thanks@RaduBarbu检查core\u resource
表中的记录,查看版本号是否已更改。如果没有,请清除缓存并再次检查(脚本应运行)。如果记录已更改,则路径或文件名存在问题(此处看起来正确)。此外,如果您的Magento版本<1.4,则数据升级脚本不适用。@benmarks解决了此问题。。。这是一个脚本缓存问题:(
public function getAllMethods($store=null)
{
$methods = array();
$config = Mage::getStoreConfig('payment', $store);
echo "<pre>";
var_dump($config);
echo "</pre>";
foreach ($config as $code => $methodConfig) {
$data = $this->_getMethod($code, $methodConfig);
if (false !== $data) {
$methods[$code] = $data;
}
}
return $methods;
}