我创建了一个自定义模块,用于创建自定义数据库表。我一直在关注Alan Storm的教程http://alanstorm.com/magento_setup_resources和http://alanstorm.com/magento_models_orm,以便创建自定义数据库表。
我的模块条目出现在core_resource表中,但实际上没有显示出来。
这是我的config.xml代码
<?xml version="1.0"?>
<config>
<modules>
<Ajzele_SimpleModel>
<version>0.0.1</version>
</Ajzele_SimpleModel>
</modules>
<global>
<models>
<simplemodel>
<class>Ajzele_SimpleModel_Model</class>
<resourceModel>simplemodel_mysql4</resourceModel>
</simplemodel>
<simplemodel_mysql4>
<class>Ajzele_SimpleModel_Model_Mysql4</class>
<entities>
<simplemodel>
<table>simplemodel</table>
</simplemodel>
</entities>
</simplemodel_mysql4>
</models>
<resources>
<simplemodel_setup>
<setup>
<module>Ajzele_SimpleModel</module>
<class>Ajzele_SimpleModel_Model_Mysql4_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</simplemodel_setup>
<simplemodel_read>
<connection>
<use>core_read</use>
</connection>
</simplemodel_read>
<simplemodel_write>
<connection>
<use>core_write</use>
</connection>
</simplemodel_write>
</resources>
</global>
</config>
我的模型文件结构是
Model
SimpleModel.php
Mysql4
SimpleModel.php
Setup.php
SimpleModel
Collection.php
这是我的sql / simplemodel_setup / mysql4-install-0.0.1.php的内容
<?php
$installer = $this;
$installer->startSetup();
$baseTableName = 'simplemodel';
$sql = "
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `simplemodel`
-- ----------------------------
DROP TABLE IF EXISTS {$this->getTable($baseTableName)};
CREATE TABLE {$this->getTable($baseTableName)} (
`simplemodel_id` int(11) NOT NULL AUTO_INCREMENT,
`field1` varchar(255) DEFAULT NULL,
`field2` varchar(255) DEFAULT NULL,
PRIMARY KEY (`simplemodel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
";
$installer->run($sql);
$installer->endSetup();
我尝试了各种调试方法,但我既没有异常也没有错误。为了让我的桌子实际显示在数据库中,我该怎么办?
答案 0 :(得分:2)
我建议您将Magento置于开发人员模式并调试XML跟踪以检查XML。要在开发人员模式下配置Magento,您应该将变量MAGE_IS_DEVELOPER_MODE放在虚拟主机的定义中或Magento根目录的.htaccess中。 例如在de virtual host中:
<VirtualHost *:80>
DocumentRoot "C:\Program Files\Zend\Apache2/htdocs/local.pruebas.com"
ServerName local.pruebas.com
DirectoryIndex index.html index.php index.htm
SetEnv MAGE_IS_DEVELOPER_MODE "1"
<Directory "C:\Program Files\Zend\Apache2/htdocs/local.pruebas.com">
AllowOverride All
Options All
Order allow,deny
Allow from all
</Directory>
稍后您应修改第66行中的index.php并输入
if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) {
Varien_Profiler::enable();
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
}
Varien_Profiler ::启用();和ini_set('display_errors',1);超出条件我认为是错误的。 现在,您无法看到XML中出现错误的simplexml_load_string()错误:
警告:simplexml_load_string()[function.simplexml-load-string]:实体:第4行:解析器错误:在C:\ Program Files \ Zend \ Apache2 \ htdocs \ local.pruebas.com \ lib中解析属性名称时出错第510行的Varien \ Simplexml \ Config.php ......
然后,它的调试时间 1.first:转到app / etc / Ajzele_SimpleModel并强制和错误,例如:<config>
<modules>
<Ajzele_SimpleModel <!--remove a '>' to force an error-->
<active>true</active>
<codePool>local</codePool>
</Ajzele_SimpleModel>
</modules>
</config>
你应该看到错误。
2.second:转到app / code / local / Ajzele / SimpleModel / etc / config.xml并重试该过程
<config>
<modules>
<Ajzele_SimpleModel <!-- remove a '>' to verify that you load correctly your extension
<version>0.0.1</version>
</Ajzele_SimpleModel>
</modules>
<global>
<models>
<simplemodel>
<class>Ajzele_SimpleModel_Model</class>
<resourceModel>simplemodel_mysql4</resourceModel>
</simplemodel>
</models>
</global>
</config>
如果你没有简单的xml错误,那么你没有正确加载扩展,下一步是调试和调试config.xml
这不是一个具体的回答,但我认为你可以看到解决方案。 谢谢,对不起我的英语
答案 1 :(得分:1)
你能尝试用这种方式定义:
<resources>
<selo_modulo1_setup>
<setup>
<module>Selo_Modulo1</module>
</setup>
</selo_modulo1_setup>
</resources>
后来放入yourmodule / sql / selo_modulo1_setup / install-1.6.0.0.php,以及安装脚本的一个例子:
<?php
die('All right');
/* @var $installer Mage_Core_Model_Resource_Setup */
$installer = $this;
$installer->startSetup();
/**
* Create table 'poll'
*/
$table = $installer->getConnection()
->newTable($installer->getTable('selo_modulo1/blog_post'))
->addColumn('post_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
'identity' => true,
'unsigned' => true,
'nullable' => false,
'primary' => true,
), 'Post Id')
->addColumn('title', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array(
), 'Post title')
->addColumn('content', Varien_Db_Ddl_Table::TYPE_TEXT, 1024, array(
), 'Post content')
->setComment('Blog_post');//Comentario de la tabla.
$installer->getConnection()->createTable($table);
$installer->endSetup();
对于不提交错误,我的扩展协议是复制/粘贴代码,类似于核心模块并调整供我使用。
关心大卫
答案 2 :(得分:0)
我使用您的结构创建了一个简单模块,并且设置资源脚本正确运行。您可以看到该模块here。 Diff与您的模块,一旦您在安装程序脚本中抛出异常,就开始逐行调试SQL。
答案 3 :(得分:0)
在安装脚本的顶部放置一个die(__FILE__);
语句,从core_resources中删除模块的行,rm -rf var / cache / mage - *然后在浏览器中访问您的站点,您应该得到您的文件的文件名。如果你确实删除了死亡陈述,那么你应该好好去。
我的猜测是,当您的文件不包含创建表的代码时,Magento会进行升级。一旦版本在core_resources中递增,安装脚本将不会重新运行。