smallerpig 发表于 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:

public function index()
{
       $data['head'] = '<link href="123.css" /> <script src="123.js"><script>';
       $this->load->view("index",$data);
}


然后在视图文件里输出head变量.
但是这样写起来真的很不爽

Closer 发表于 2015-4-22 09:24:42

他的意思是說不用特地放在控制器端
只要放在視圖端

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

 

yuzhigang5460 发表于 2015-4-21 23:57:33

直接写在视图里就可以了。

smallerpig 发表于 2015-4-22 09:09:16

yuzhigang5460 发表于 2015-4-21 23:57
直接写在视图里就可以了。

能举个例子么?

smallerpig 发表于 2015-4-22 09:10:01

要使用模板的功能

yuzhigang5460 发表于 2015-4-22 10:28:03

Closer 发表于 2015-4-22 09:24
他的意思是說不用特地放在控制器端
只要放在視圖端



我明白楼主说的意思,因为在Asp.net的Razor语法中,可以继承,继承的意思是这样的:
在母版页中设置一个section,比如叫Header:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    @RenderSection("Header",false)
</head>
<body>
……

然后,在某个具体的视图中,指明一下Header具体指的是什么:

@section Header
{
<script type="text/javascript" src="jquery.js">
</script>
}

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

当控制器加载这个视图时,会把具体视图里的Header节填充到母版中,生成的效果是:

<!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/forum.php?mod=viewthread&tid=19488&page=1#pid87243
当然会很麻烦,我觉得你会放弃的, :-)

yuzhigang5460 发表于 2015-4-22 10:28:51

smallerpig 发表于 2015-4-22 09:09
能举个例子么?

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

Closer 发表于 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
static/image/hrline/line3.png
上面連結上不了的話,請點 : Github - bcit-ci/CodeIgniter/layout library

 

smallerpig 发表于 2015-4-22 10:46:57

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

哎!那只好放弃了.还是老老实实的使用ci的方法吧!
原来你也对ASP.NET MVC很了解呢.膜拜下!{:soso_e196:}

smallerpig 发表于 2015-4-22 10:50:21

Closer 发表于 2015-4-22 09:24
他的意思是說不用特地放在控制器端
只要放在視圖端



是的.我就是使用的layout.
但是在每个页面不同的代码部分不可能只有一个地方.其中一个地方就是引用的资源.这时候引用资源的html代码却要写在控制器里(问题就在这).所以才会有此贴的诞生!
页: [1] 2
查看完整版本: 各位是怎么处理不同页面加载不同头文件的问题的?