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

各位是怎么处理不同页面加载不同头文件的问题的?

[复制链接]
发表于 2015-4-21 14:20:51 | 显示全部楼层 |阅读模式
本帖最后由 smallerpig 于 2015-4-21 14:22 编辑

在使用ASP.NET MVC的时候我们可以在视图文件里面定义layout的某一部分内容.例如在模板视图的head标签内部定义一个变量让使用它的子视图文件来确定到底要加载除了公用的js\css文件外还有为这个视图单独加载的js\css文件.

CI怎么实现类似功能,因为我不想把html的代码写到控制器里,我希望所有的html代码都在视图文件里完成,而控制器只做逻辑的处理.
目前我都是都是这样处理:
controller:
PHP复制代码
 
public function index()
{
       $data['head'] = '<link href="123.css" /> <script src="123.js"><script>';
       $this->load->view("index",$data);
}
 
 
复制代码

然后在视图文件里输出head变量.
但是这样写起来真的很不爽
发表于 2015-4-22 09:24:42 | 显示全部楼层
他的意思是說不用特地放在控制器端
只要放在視圖端

當然,你需要搭配 layout 的使用方式
先載入公有的 (layout),再針對每個控制器需求不一樣
對他們自己本身放置私有的 (now view)

 
发表于 2015-4-21 23:57:33 | 显示全部楼层
直接写在视图里就可以了。
 楼主| 发表于 2015-4-22 09:09:16 | 显示全部楼层
yuzhigang5460 发表于 2015-4-21 23:57
直接写在视图里就可以了。

能举个例子么?
 楼主| 发表于 2015-4-22 09:10:01 | 显示全部楼层
要使用模板的功能
发表于 2015-4-22 10:28:03 | 显示全部楼层
Closer 发表于 2015-4-22 09:24
他的意思是說不用特地放在控制器端
只要放在視圖端

我明白楼主说的意思,因为在Asp.net的Razor语法中,可以继承,继承的意思是这样的:
在母版页中设置一个section,比如叫Header:
HTML复制代码
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    @RenderSection("Header",false)
</head>
<body>
……
 
复制代码

然后,在某个具体的视图中,指明一下Header具体指的是什么:
HTML复制代码
 
@section Header
{
<script type="text/javascript" src="jquery.js">
</script>
}
 
复制代码

注意:以上这段代码是写在具体的视图文件中,而不是控制器中。

当控制器加载这个视图时,会把具体视图里的Header节填充到母版中,生成的效果是:
HTML复制代码
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <script type="text/javascript" src="jquery.js">
   </script>
</head>
<body>
……
 
复制代码


这是asp.net MVC的razor渲染方式。而CI的视图实际上不具备这个特性,Header里内容只能在控制器里预选指定好,通过视图数据传递给视图,而不能在视图里直接指定。

如果楼主真的想达到asp.net mvc razor的视图模板效果,可以使用@hex的一个推荐: http://codeigniter.org.cn/forums ... amp;page=1#pid87243
当然会很麻烦,我觉得你会放弃的, :-)

点评

就是我说的意思!我本身是个.NET程序员.利用自己时间学习CI的,在使用CI的时候发现这个问题确实很让我这个asp,netmvc的用户头疼!  发表于 2015-4-22 10:45
发表于 2015-4-22 10:28:51 | 显示全部楼层

看下回复,我的理解对不对。

发表于 2015-4-22 10:32:29 | 显示全部楼层
本帖最后由 Closer 于 2015-4-22 10:36 编辑
yuzhigang5460 发表于 2015-4-22 10:28
我明白楼主说的意思,因为在Asp.net的Razor语法中,可以继承,继承的意思是这样的:
在母版页中设置一个s ...

哈哈~ 其實我那個是回給樓主看的 XD (詳述你想表達的意思)
我參考的是 appleboy 的方式 :
小惡魔 – 電腦技術 – 工作筆記 – AppleBOY - 簡易 CodeIgniter Layout Library for Template

上面連結上不了的話,請點 : Github - bcit-ci/CodeIgniter/layout library

 
 楼主| 发表于 2015-4-22 10:46:57 | 显示全部楼层
yuzhigang5460 发表于 2015-4-22 10:28
我明白楼主说的意思,因为在Asp.net的Razor语法中,可以继承,继承的意思是这样的:
在母版页中设置一个s ...

哎!那只好放弃了.还是老老实实的使用ci的方法吧!
原来你也对ASP.NET MVC很了解呢.膜拜下!{:soso_e196:}
 楼主| 发表于 2015-4-22 10:50:21 | 显示全部楼层
Closer 发表于 2015-4-22 09:24
他的意思是說不用特地放在控制器端
只要放在視圖端

是的.我就是使用的layout.
但是在每个页面不同的代码部分不可能只有一个地方.其中一个地方就是引用的资源.这时候引用资源的html代码却要写在控制器里(问题就在这).所以才会有此贴的诞生!

本版积分规则