本来先要写数据库的增删改查的,但如果懂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_setup,setup里直接使用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关闭.
这时候只要一刷新缓存:
看到了吧,作者没定义任何类,系统自动使用核心的Setup类,就是作者前面说的app/code/core/Mage/Core/Model/Resource/Setup文件。
动起来吧:让我们用资源配置来安装数据表/字段并且写入数据:
首先我们要确保数据库里没有blog表哦
修改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表里看。
关于作者