PHP CI $this->load->view();方法修改

在CI中加载视图要用load->view()方法
每次load->view()的时候都会把视图文件读取然后再输出到页面
比如加载首页要:
$this->load->view('index');

在index.php中要 load view('top'); view('foot');
在这同时。index.php中还要加载css js (这里加载css js 都写了一个公用的方法调用 为了更好的实现版本控制 这个时候是可以把所有调用的记录放在数组中的)
所以<script></script><link></link>这样的标签都不能包含在头部的<head></head>标签里
问: 如何改CI的view()方法 能让js css放到<head></head>标签里????

至尊宝
至尊宝
1159
编辑于2012-02-20
评论 (3)链接2012-02-20 
  • 0 支持
    不是很明白你说的什么意思,view方法第三个参数设置成true,就能获取到内容,不直接输出。 – 小飞 2012-02-20
  • 0 支持
    一般网站中头尾不是都分离出来么? 头中的代码如:
    <html>
    <head>
    <title>xxxx</title>
    <script src="xxx.js"></script>
    <link href="xxx.css"></link>
    </head>
    这里头部只是添加一些公用的css js 其它页面的JS 在那个页面中单独调用
    不可能所有的JS都放在头部中吧?
    那就不能把JS引到<head></head>标签中。。只能引到页面<body>中
    如何放到<head>标签中???
    – Gerry 2012-02-20
  • 1 支持
    加一个header模板,用来加载JS和CSS
    $this->load->view("header");
    – xiaomi 2012-02-20

你的意思是不同的页面引入不同的js,css文件,但是所有的页面都公用一个头部,而现在的实现是将所有的js,css文件的引入写在的头部页面中,所以导致有些页面引入了不需要的文件,增加了请求数量,以及页面大小。那么你可以尝试以下方法:

新建配置文件 loadfile.php

  
$config['loadfile'] = array(
'js' => array('base'=> array('common.js','base.js','lib.js'),'full' => 'xx.js','xxx1.js','.....','homePage' => 'xxx.js');
'css' => ....
)

那么在load view 前更具不同的页面先调用不同的配置:

  
$this -> load -> config('loadfile');
$loadFiles = $this -> config -> item('loadfile');
$data['js'] = $loadFiles['js']['homePage'];
$data['css'] = $loadFiles['css']['base'];
$this->load->view("xxx",$data);

在xxx模板页面中写:
<?php $this->load->view('header');?>

在header文件中引入js和css的地方写为:

  
<?php
foreach($js as $jsf)
echo '<script type="text/javascript" src="xxx/js/'.$jsf.'"></script>';
foreach($css as $cssf)
echo '<link rel="stylesheet" type="text/css" href="css/'.$cssf.'" />';
?>

如果用到了模板引擎,那么思路是一样的。

大概就是这么个意思,方法还可以简单,自己根据实际情况优化吧。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-21

不是您所需,查看更多相关问题与答案

德问是一个专业的编程问答社区,请 登录注册 后再提交答案