标签归档 Magento 二次开发

通过清心醉

Magento 开发实例七(模型Model)资源安装配置

本来先要写数据库的增删改查的,但如果懂PHP的朋友们看了前面的文章,相信都能想到办法了。所以先说说资源的配置问题,下文再写详细的增删改查。

作者提醒:永远不要相信国内搜索的数据,如果真的想认真学开发,好好GOOGLE看看国外正宗的开源教程,或者多看Magento的核心代码的编写规范以及插件的规范。作者就因为误信国内的数据,所以资源配置都得最后来弄。

正文开始:app.tar

Magento都是由配置文件做系统的支撑的。

读取modules所有的模块配置->

读取所有模块里的etc目录里的配置文件(比如config.xml)->

根据etc目录里的配置文件分配路由、资源等(需要的时候调用出来)->

然后就是MVC的访问操作了。就是作者前面几篇文章所说

 

其实,Magento当读取到etc/config.xml文件的时候,会查看有没有setup节点,如果有,执行安装,一般来说都是只执行一次,所以一会我们写的代码里要有中指。

 

首先增加安装配置:

<mymodule_setup>

<setup>

<module>Mage_Mymodule</module>

</setup>

<connection>

<use>core_setup</use>

</connection>

</mymodule_setup>

 

定义个module_setupsetup里直接使用module,表示直接使用模块里的mysql4-install.0.1.0.php文件

 

在这里作者要特别说明下,<setup><module>Mage_Mymodule</module></setup>

看这名字就知道,是项目名/模块(插件名)

至于<connection><use>core_setup</use></connection>

 

我们可以追踪到app/code/core/Mage/Core/Model/Resource/Setup文件

class Mage_Core_Model_Resource_Setup

{

const DEFAULT_SETUP_CONNECTION = ‘core_setup’;

const VERSION_COMPARE_EQUAL = 0;

const VERSION_COMPARE_LOWER = -1;

const VERSION_COMPARE_GREATER = 1;

 

const TYPE_DB_INSTALL = ‘install’;

const TYPE_DB_UPGRADE = ‘upgrade’;

const TYPE_DB_ROLLBACK = ‘rollback’;

const TYPE_DB_UNINSTALL = ‘uninstall’;

const TYPE_DATA_INSTALL = ‘data-install’;

const TYPE_DATA_UPGRADE = ‘data-upgrade’;

………

………

}

一般来说我们是需要配置个类继承该类来进行安装的,但由于作者在<setup>节点里直接使用的是模块的名称而不是<class>(比如配置的Blog就是class),这时候Magento会自动找到sql目录里的mysql4-install.0.1.0.php文件。

 

这要特别说明下的就是

Config.xml里有个配置文件的版本:

<modules>

<Mage_Mymodule>

<version>1.1.1</version>

</Mage_Mymodule>

</modules>

 

但我们mysql4-install.0.1.0文件,是不受那个版本的影响,如果需要默认安装,必须要有mysql4-install.0.1.0.php

 

Mage/Mymodule/sql/mymodule_setup/Mysql4-install.0.1.0.php

#目录里的mymodule_setup是我们前面定义的,可以看config.xml文件

#写入下面的

<?php

echo “类名是:”.get_class($this).”</br>”;

die(“exit”);

 

在这里我们一定要加个die();否则流程走了一次,就不走了哦!

而且后面我们执行有SQL的操作的时候,也加个DIE好点,看数据库里存在数据了再把DIE关闭.

这时候只要一刷新缓存:

2015-05-03

看到了吧,作者没定义任何类,系统自动使用核心的Setup类,就是作者前面说的app/code/core/Mage/Core/Model/Resource/Setup文件。

 

动起来吧:让我们用资源配置来安装数据表/字段并且写入数据:

首先我们要确保数据库里没有blog表哦

2015-05-03-01

修改mysql4-install-0.1.0.php

#注:请保留die(“exit”);

 

<?php

echo “类名是:”.get_class($this).”</br>”;

$installer=$this; #把类重新赋值,也可以直接使用$this,这不是强制的,但只是命名规范而已

$installer->startSetup(); #启动安装方法,可以在app/code/core/Mage/Core/Model/Resource/Setup里查看到

$table=$installer->getTable(‘mymodule/blog’);#添加表名称,如果有前缀,会自动增加哦.

$sql=”CREATE TABLE $table(id int primary key auto_increment,name varchar(128),phone varchar(128))”;

$intosql=”INSERT INTO $table(name,phone)VALUES(‘qingxinzui’,’13823819185′)”;

$installer->run($sql);

$installer->run(intosql);

$installer->endSetup();

die(“安装成功!”);

 

然后我们刷新下页面

 

类名是:Mage_Core_Model_Resource_Setup
安装成功!

 

看看MYSQL里吧

是不是已经有了你想要的表和字段内容了?

 

这时候我们就可以把die(“安装成功!”);取消掉了

同时删除magento数据库里的blog表和字段

重新走一遍。

 

如果你是和作者一样的走法你会发现,刷新后,直接返回主页了,其实是因为数据已经写入成功,已经没有DIE中止了。

这时候再看数据库里,blog表和字段内容都存在的。

资源配置安装完成。

 

如果我们需要升级

修改config.xml文件里的版本号

比如作者修改为1.1.2

然后创建个mysql4-upgrade-1.1.1-1.1.2.php

 

这有些会迷惑的,我们一开始安装的时候文件名是mysql4-install-0.1.0.php

怎么这是1.1.1

0.1.0是默认安装,当写入到数据库之后(可以在core_resource看)版本实际是以config.xml里的<version>写入的

所以我们要针对当前的<version>来进行命名升级

 

mysql4-upgrade-1.1.1-1.1.2.php文件写入:

 

<?php

echo “类名是:”.get_class($this).”</br>”;

$installer=$this; #把类重新赋值,也可以直接使用$this,这不是强制的,但只是命名规范而已

$installer->startSetup();

$table=$installer->getTable(‘mymodule/blog’);

$intosql=”INSERT INTO $table(name,phone)VALUES(‘qingxinzui1′,’13823819185’)”;

$installer->run($intosql);

$installer->endSetup();

die(“安装成功!”);

 

我们一样加个die看是否有写入

如果blog表里多一行数据,说明成功。

这时候我们在关闭DIE,让系统再执行一次,如此一来我们应该有3行数据了。

 

以后我们需要再进行升级模块(插件)

只需要看config.xml里的配置文件的<version>是多少

然后在模块(插件)的sql目录里创建对应的文件

mysql4-upgrade-<version>-新的<version>.php

如:mysql4-upgrade-1.1.1-1.1.2.php

这时候别忘记了把config.xml里的也修改成1.1.2

现在的版本你要不确定可以core_resource表里看。