用户
 找回密码
 入住 CI 中国社区
搜索
楼主: spt119
收起左侧

是不是CI的一个bug?关于div外多了个空格或换行

[复制链接]
 楼主| 发表于 2009-6-7 09:47:14 | 显示全部楼层
本帖最后由 spt119 于 2009-6-7 09:57 编辑
CI的view相当于一段过程式php代码,填充的数据无非是一些key=>value的数组,
布局错乱明显是css问题,和CI有什么关系?
我把我说的话详细解释了,你明白了吗? ...
visvoy 发表于 2009-6-7 09:22

感觉说话这么牛呢?有问题来找组织,还不对了?这水平当版主?
再说俺在发帖时说明白了,首先是想找到解决问题的办法,再有顺便提出个问题,是不是CI的bug,如果是,CI在升级到时候更正,对所有使用CI的人都是好事,如果不是,那更好。版主,你怎么就敢100%肯定CI没有bug?这个问题不是CI造成的?
做人太牛逼,不好。尤其是当领导。
发表于 2009-6-7 10:19:32 | 显示全部楼层
1. 楼主认为出错的位置,换成viewdata是一个title字符串,CI渲染viewdata用的是extract(数组)和include viewfile,对于viewdata数组,CI没有做任何改动,这点可以参考system/libraries/output.php和loader.php源码

2. 如果楼主认为CI在渲染viewdata时候多了个空格或换行,那么同时被渲染的viewdata应当全部多一个换行或空格,但从图片来看,实际上只有title行被撑大,其他未见异常,这极有可能是div/css问题

3. 楼主说在ie/firefox里面都有这个问题,更确定了是div/css问题

4. 因为title行不在文件结尾处,这肯定也不是UTF-8的BOM问题

5. 实在找不出问题,建议将viewfile逐个div拆开调试,我都是手工写html+css+js

6. 我当斑竹之前说话也是这样的,东北人说话比较直,楼主可以搜索我以前的帖子,这和斑不斑竹没关系

综上,这是布局的问题
 楼主| 发表于 2009-6-7 10:43:27 | 显示全部楼层
我的表述分述在各个回帖里,这里整理一下。
1)多出来的空格或换行,是在布局的div之外。并不是在div之内。
2)通过浏览器“页面显示源代码”功能,在相关的div区域外,看不到这个空格或含行的标记显示。
3)出问题的地方不是标记的<head></head>内,是<body></body>内,是在body下第一个div区块(rightframe)之外就多出来一个。因为需要在<head></head>内挂载一部分变量数据,所有在控制器内调用头,而不是视图中调用。
4)同样,基于CSS和HTML常识,即便在title中加入空格或换行符,也不是产生这样的效果,版主可以试试。
5)为了解决这个问题,采用了很多的手段和办法,都无一例外的显示同一个问题。而且并非所有的模块都是(有的就很正常),侧面证明了CSS的定义,至少在这个部分的定义,是可以认为是正确的。如此,可以排除CSS定义的问题。
6)所有的HTML,CSS,俺也都是手写,并没有使用dreamweaver。
7)当版主不是当自己,是为了更好地推广CI的应用,你个人什么样没有人关心,但作为版主,对于技术问题本身的探讨,就必须本着“服务”的原则。
所以,我提出一个观点,有可能是CI的一个BUG,虽然我不肯定。但版主的意见,我认为并不可靠。
发表于 2009-6-7 10:50:53 | 显示全部楼层
本帖最后由 rolaka 于 2009-6-7 10:52 编辑

视图里的php代码你怎么嵌入的呢?

写了这么长时间 还真没发觉CI的view有啥问题

只给css 不够把

版主说的话 个人理解不同罢了...
 楼主| 发表于 2009-6-7 10:56:40 | 显示全部楼层
本帖最后由 spt119 于 2009-6-7 10:58 编辑
视图里的php代码你怎么嵌入的呢?

写了这么长时间 还真没发觉CI的view有啥问题

只给css 不够把

版主说的话 个人理解不同罢了...
rolaka 发表于 2009-6-7 10:50

我给楼上拷贝下代码。
顶部文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="<?php echo base_url();?>js/jquery.js"></script>
<script type="text/javascript" src="<?php echo base_url();?>js/table.js"></script>
<link href="<?php echo base_url();?>css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
主体部分文件:
<div id="right_frame">
  <div id="back_title"><?php echo $back_title?>使用提示</div>
  <div id="back_content">
      <ul>
      <li>如果您的服务器支持GZIP压缩模式,请在站点信息设置中,打开GZIP功能。这会使您的站点的访问速度,获得极大提高;</li>
      <li>定期更换后台管理密码,定期产看后台管理日志及后台访问日志。</li>
        <li>养成备份的良好习惯,应对各种突发事件,确保本程序稳定的运行状态。</li>
      </ul>
  </div>
</div>
就在这个div(rightframe)上面,就出现一个空格或换行
 楼主| 发表于 2009-6-7 11:00:53 | 显示全部楼层
body标记和body标记下第一个div标记之间,多出来一个空格或换行。
而且不是所有的模块都是,有的非常正常。如果这也是CSS的问题,那是在没什么好说的了。
 楼主| 发表于 2009-6-7 11:17:46 | 显示全部楼层
问题解决。
不在控制器里挂载头文件(既包含<head></head><body>信息的文件),在视图中挂载。所有的变量,集中在控制器的index()区块里输出。
样式表没有任何的变化。
这是不是CI的一个BUG,就不好说了,算是提出个问题吧,有高人或明白人,比如版主,可以参看一下。
发表于 2009-6-7 11:42:20 | 显示全部楼层
我给楼上拷贝下代码。
顶部文件:
body标记和body标记下第一个div标记之间,多出来一个空格或换行。
而且不是所有的模块都是,有的非常正常。如果这也是CSS的问题,那是在没什么好说的了。
spt119 发表于 2009-6-7 10:56

<body>
主体部分文件:<--CI不可能在这个地方自动增加个空格/换行
<div id="right_frame">

使用view文件的情况下,在action方法里面echo "<head>xxx</head>",转换成视图会变成:
<head>xxx</head> <--跑到顶部,导致DOCTYPE混乱
<!DOCTYPE html ...>
<html ...>
<head>

正确的方法应当将其作为viewdata数组,在viewfile里面替换
 楼主| 发表于 2009-6-7 11:53:27 | 显示全部楼层
回版主。
最开始是这样调用头文件:

        function __construct(){
                parent::Controller();
                $this->load->model('admin/adminwebinfo_model');
                $this->load->model('admin/adminlog_model');
                $this->webinfo = $this->adminwebinfo_model->get();
                $this->page_data = array(
                                                                                                        'webinfo' => $this->webinfo,
                                                                                                        'back_title' => $this->config->item('control_panel'),
                                                                                                        'page_title' => '站点综合信息设置'
                );
                $this->load->view('admin/admin_head',$this->page_data);
                $this->load->helper ( array('form','url') );
        }
现在是把头文件从控制器中删除。所有的变量放在function index()中完成。而且在视图中,直接使用
<?php echo $this->load->view('admin/admin_head');?>完成。
admin_head.php的代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="<?php echo base_url();?>js/jquery.js"></script>
<script type="text/javascript" src="<?php echo base_url();?>js/table.js"></script>
<link href="<?php echo base_url();?>css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
 楼主| 发表于 2009-6-7 11:56:49 | 显示全部楼层
也就是说,通过上面的调用和页面布局(拆开后的)在body和body下第一个div(rightframe)之间,莫名其妙出来个空格或换行。我所有的后台模块,基本都在构造函数中加载页头文件,但有的显示正常,有的就不正常,而且在头文件中,加载的内容基本都没有什么区别。
所以,怀疑是CI在OUTPUT中,有可能多了个空格或换行,当然我也不肯定。

本版积分规则