用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3646|回复: 2
收起左侧

DiliCMS新增分类模型时的一个bug

[复制链接]
发表于 2012-10-23 15:55:56 | 显示全部楼层 |阅读模式
本帖最后由 程勇 于 2012-10-23 15:57 编辑

bug重现步骤:
1.在“分类模型管理”-“添加新分类模型”中添加一个模型
2.在分类模型管理,点击刚刚添加的那个模型的“字段管理”-“添加新字段”
随便先添加一个字段,只为测试用
3.上述动作完成后,点击“内容管理”-“刚刚添加的那个分类模型”-“添加”

到这一步的时候就报错了
PHP复制代码
Field 'path' doesn't have a default value
复制代码


一看就知道是这个叫path的字段没有默认值,刚刚接触这个CMS,我也不知道这个字段具体是干啥用的
打开对应的程序文件;/shared/models/category_del.php
找到添加分类模型的那个函数:
PHP复制代码
 
    /**
     * 新增分类模型
     *
     * @access  public
     * @param   array
     * @return  bool
     */

        public function add_new_category($data)
        {
                if ($this->db->insert($this->db->dbprefix('cate_models'), $data))
                {
                        $this->load->dbforge();
                        $table = 'u_c_' . $data['name'];
                        $this->dbforge->drop_table($table);
                        $this->dbforge->add_field(array('classid' => array('type' => 'INT', 'constraint' => 5, 'unsigned' => TRUE, 'auto_increment' => TRUE)));
                        $this->dbforge->add_key('classid',TRUE);
                        $this->dbforge->add_field(array('parentid' => array('type' => 'INT', 'constraint' => 5, 'unsigned' => TRUE, 'default'=>0)));
                        $this->dbforge->add_field(array('level' => array('type' => 'INT', 'constraint' => 2, 'unsigned' => TRUE, 'default'=>1)));
                        //$this->dbforge->add_field(array('path' => array('type' => 'VARCHAR', 'constraint' => 50)));
 
                        // 给加一个默认值吧,由于是varchar类型的,就随便扔了个空字符串
                        $this->dbforge->add_field(array('path' => array('type' => 'VARCHAR', 'constraint' => 50, 'default' => '')));
 
                        $this->dbforge->create_table($table);
                        return TRUE;
                }
                return FALSE;        
        }
复制代码



到这儿问题就解决掉了,但是这个值具体是干啥用的,暂时还不清楚,请有知道的告知一下{:soso_e100:}
 楼主| 发表于 2012-10-23 16:04:43 | 显示全部楼层
还发现另一个小问题:
/admin/controllers/attachment.php   line:200

"编辑器文件上传接口"(_save_post)这个函数中写数据库的时候没用前缀处理,如果用户不选择缺省的表前缀,这儿就报错啦.

解决办法是把第200行的那个insert中的表名处理一下下
PHP复制代码
 

$this->db->insert('dili_attachments', $upload);
换成
$this->db->insert($this->db->dbprefix('attachments'), $upload);
 
复制代码
发表于 2012-11-23 21:52:30 | 显示全部楼层
果然。我也遇到了,新手。我是把数据库默认只改了

本版积分规则