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

CI的一个诡异问题[已解决]

[复制链接]
发表于 2008-6-16 02:41:31 | 显示全部楼层 |阅读模式
不知道有没有谁碰到过。

我在controller里面加载了四个model。我写在构造函数里面。
然后在view的head标签中我加载了一些css/js。

发现似乎是model加载多了对速度有影响还是什么的,head里面的css/js虽然在传输完成之后确实还在head标签内部,但事实上firefox和ie 7在解析时都等不及head了,把css/js都放进了body里面。导致结果是body里面第一个元素header本来应该是直接顶着浏览器上端的,结果却离上端有一段距离。因为浏览器将css/js那一堆都放在header和body开始之间了。
将model注释掉一两个,结果就正常了。我是指,随便注释掉一两个在这次访问中controller的方法没有用到的model,就会一切正常。

郁闷,本来以为用ci可以做得很快,结果却是用这玩意经常在一些小地方被玩死,二十天的项目到目前已经拖到五十多天了。

[ 本帖最后由 eddix 于 2008-6-16 23:15 编辑 ]
发表于 2008-6-16 09:40:48 | 显示全部楼层
没遇到过这种问题,你用的是什么版本,什么 Web 服务器,不应该出现这样的问题。
发表于 2008-6-16 15:33:34 | 显示全部楼层
事实上,楼主这样的推测是没有根据的.

CI在视图输出之前,是不加载任何VIEW这类的东西的.这就是传说中的ob_start()之类的说法吧.
如果LZ在构造器中加载model,根本都没有涉及到view,何来对view 有影响呢?

如有楼上的说法,可能是LZ的程序过度复杂,视图有交错嵌套吧.

有个测方法,你可以先把css/js直接放到view的文件中,不要<link....> 看是否出现这种情况.
 楼主| 发表于 2008-6-16 21:56:44 | 显示全部楼层
to itlong:
有依据的推测就不叫推测了。
而且后来试了一些其它情况,推翻了我做的这个假设。

事实上比较像是其中两个model之间有冲突,同时加载两个model就会出现这个问题,而只加载其中一个就不会有影响。

这是第一个model,作音乐管理。
PHP复制代码
<?php
class Music_model extends Model {
        function Music_model()
        {
                parent::Model();
                $this->load->library("upload");
                $this->load->config("upload");
        }
        function createMusic($field)
        {
                $this->upload->initialize($this->config->item("music_upload"));
                if ($this->upload->do_upload($field)) {
                        $data = $this->upload->data();
                        $music = array(
                                'name' => $data['orig_name'],
                                'file_name' => $data['file_name'],
                        );
                        $this->db->insert("musics", $music);
                        return true;
                } else {
                        $error = $this->upload->display_errors();
                        return $error;
                }
        }
        function deleteMusic($id)
        {
                $music_upload_config = $this->config->item("music_upload");
                $music = $this->db->get_where("musics", array("id" => $id))->row();
                if ($music != null) {
                        unlink($music_upload_config['upload_path'] . $music->file_name);
                        $this->db->delete("musics", array("id" => $id));
                }
                return true;
        }
}
?>
复制代码
这是第二个model,做友情链接管理。
PHP复制代码
<?php
class Link_model extends Model {
        function Link_model()
        {
                parent::Model();
                log_message("DEBUG", "link Model loaded");
        }
        function createLink($link) {
                $this->db->insert("links", $link);
                return true;
        }
        function updateLink($id, $link) {
                $this->db->update("links", $link, "id=" . $id);
                return true;
        }
        function deleteLink($id) {
                $this->db->delete("links", array("id" => $id));
                return true;
        }
}
?>
复制代码
同时加载这两个model就会出问题。
诡异的是我用firebug看response,的的确确是正常的html,css/js都在head中。但是无论是firefox还是ie,在解析的时候都将css/js放进body中……
有谁碰到过这种情况?或是知道哪些可能会导致这种情况?
 楼主| 发表于 2008-6-16 23:14:50 | 显示全部楼层
汗……我之前用的编辑器是E-texteditor,喜欢它的快速和类textmate的snippets功能。
换成zend studio之后一切正常了。

难道是Cygwin的问题?
发表于 2008-6-17 11:04:01 | 显示全部楼层
呵呵,我给楼主改了一下语法加亮。
 楼主| 发表于 2008-6-17 17:00:03 | 显示全部楼层
谢版主。
不过问题虽然解决了,我还是不明白原因。

本版积分规则