所以我基本上试图将<link>
和<script>
标签从模块视图文件(显示在页面正文中)传递到我的原始头文件中。如何传递包含这些引用的变量?
目前我只是在我的模块视图中添加了额外的<head></head>
标签,但这样做感觉很麻烦和狡猾,因为这意味着头部标签在页面顶部使用,并且下来。
编辑: 没有意识到堆栈溢出已编辑出我对此问题至关重要的标记!对不起伙计们!
答案 0 :(得分:0)
听起来你真的需要CodeIgniter的模板设置。以下是我最喜欢的一些链接:
http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html
http://philsturgeon.co.uk/demos/codeigniter-template/user_guide/
我个人最喜欢的简单:
http://maestric.com/doc/php/codeigniter_template
编辑: Per @ Sneaksta的问题,这是我如何将css脚本添加到我的模板中:
在我的主模板中,我有这段代码:
<?php if (!empty($cssFiles)): ?>
<?php foreach ($cssFiles as $styleSheet): ?>
<link rel="stylesheet" media="screen" href="<?= base_url(); ?>styles/<?= $styleSheet; ?>" />
<?php endforeach; ?>
<?php endif; ?>
然后在我的控制器中,可能需要为每个函数加载不同的CSS文件,我这样做:
$cssFiles = array('style1.css', 'style2.css', 'style3.css');
$this->template->set('cssFiles', $cssFiles);
答案 1 :(得分:0)
Sneaksta,
我想我明白你在问什么,但我不是百分百肯定,因为你没有发布任何代码示例。
所以我将举例说明如何进行&#34;伸缩&#34;允许您在头标签内模块化加载不同样式标签的视图。
正如Damien Pirsy所提到的,视图是缓冲的,这意味着CI会创建一个特殊的输出缓冲区并将一系列View对象连接在一起,然后将最终的缓冲区内容输出为完成的网页。
我的下面的例子建立在这种思维链上:
最终用户 (电话) - &gt;页面控制器,然后: (来电和通过参数) - &gt;基本视图 (调用多个片段视图) - &gt;片段视图+ - &GT;片段视图+ - &GT;片段视图=最终累积页面 - &gt; (作为输出发回) - &gt;最终用户
首先制作&#34;基本视图&#34;,我们将调用&#34; base.php&#34;供参考:
<!doctype html>
<html>
<head>
<!-- Base View -->
<?php
//This "if" + "isset()" statement is important,
// because if you forget to pass the variable in the controller
// CI will throw an error.
// Also important: the name of variable ($style) MUST match the
// the name of the associative element in the controller! (See
// remarks below on handling this in the controller)
if(isset($style))
{
//Loading views is like a telescoping effect:
//A view may load other views into itself recursively
$this->load->view($style);
}
else
{
//This echo statement will show a comment in
// source code if an error occurred during loading a view
echo "<!-- Style not found -->");
}
?>
</head>
<body>
<!-- Page Content Here -->
</body>
</html>
接下来,您创建样式视图(注意:以下代码片段将单独放在一个单独的文件中),我们将调用它们&#34; style1.php&#34;,并且必须按顺序放置其他视图让CI找到它,例如在&#34;应用程序/视图&#34;内夹。这允许您通过更改加载的样式视图来交换标题中声明的内联样式块:
<style type="text/css">
/*Style 1:*/
/*Just do something simple and obvious, i.e. turn text red*/
body { color: red; }
</style>
接下来,您将创建备用样式视图(注意:以下代码片段将单独放在一个单独的文件中),我们将调用它们&#34; style2.php&#34;,并且必须与您的其他视图一起定位CI命令找到它,例如在&#34;应用程序/视图&#34;内夹。这允许您通过更改加载的样式视图来交换标题中声明的内联样式块:
<style type="text/css">
/*Style 2:*/
/*Just do something simple and obvious, i.e. turn text blue*/
body { color: blue; }
</style>
现在我们的控制器&#34; example.php&#34;我们告诉base.php将style1.php文件加载到其标题中。我们通过在加载base.php视图时将文件名作为参数传递,通过将文件名作为关联数组的元素传递,代码igniter将解析该参数数组并创建一个与其名称相同的变量。关联元素,并在base.php视图中使您可以使用该变量:
<?php
class Example extends CI_Controller
{
//Constructor
function __construct(){ parent::__construct(); }
//Base View request handler
function baseview()
{
//Note: Make an array, be certain to name the element
// the same as what will be expected inside base.php
$params = array("style" => "style1.php");
//Switching to load a different style is now easy
// just comment out the line above, and uncomment the line below:
//$params = array("style" => "style2.php");
//Pass the parameters array into the CI load view method:
$this->load->view("base.php", $params);
}
}
?>
累积结果应该是在页眉中切换样式标签的模块化功能,只需指定哪种&#34;样式视图&#34;加载(您甚至可以构建一个模型来检索哪些&#34;样式视图&#34;从数据库表加载)。显然,这种方法在Web浏览器中具有某些处理开销约束,因为您正在构建实际的内联HTML源代码,而不是通过链接标记链接到CSS文件。这意味着浏览器不会为每个页面加载缓存css内容,但必须在每个后续请求中下载它。