因此,我基本上是在尝试将<link>
and<script>
标记从模块视图文件(显示在页面正文中)传递到我的原始头文件中。如何传递包含这些引用的变量?
目前我刚刚<head></head>
在我的模块视图中添加了额外的标签,但这样做感觉很混乱和狡猾,因为这意味着头部标签被用在了页面的顶部,并且也在中间。
编辑: 没有意识到堆栈溢出编辑了我对这个问题至关重要的标签!对不起大家!
因此,我基本上是在尝试将<link>
and<script>
标记从模块视图文件(显示在页面正文中)传递到我的原始头文件中。如何传递包含这些引用的变量?
目前我刚刚<head></head>
在我的模块视图中添加了额外的标签,但这样做感觉很混乱和狡猾,因为这意味着头部标签被用在了页面的顶部,并且也在中间。
编辑: 没有意识到堆栈溢出编辑了我对这个问题至关重要的标签!对不起大家!
听起来您确实需要 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
编辑:根据@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);
偷偷摸摸,
我想我明白你在问什么,但我不是 100% 确定,因为你没有发布任何代码示例。
所以我会给你一个例子,你可以有一个“伸缩”视图,它允许你在头部标签中模块化加载不同的样式标签。
正如 Damien Pirsy 提到的,Views 是缓冲的,这意味着 CI 制作了一个特殊的输出缓冲区,并将一系列 View 对象连接在一起,然后将最终的缓冲区内容作为完成的网页输出。
我下面的例子是建立在这种思维链上的:
最终用户(调用)--> 页面控制器,然后:(调用并传递参数)--> 基本视图(调用多个片段视图)--> 片段视图 + --> 片段视图 + --> 片段视图 = 最终累积页面-->(作为输出返回)-->最终用户
首先制作“基本视图”,我们将其称为“base.php”以供参考:
<!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>
接下来,您创建样式视图(注意:以下代码片段将单独位于一个单独的文件中),我们将其称为“style1.php”,并且必须与您的其他视图一起放置以便 CI 找到它,例如在里面“应用程序/视图”文件夹。这使您可以通过更改加载的样式视图来交换标题中声明的内联样式块:
<style type="text/css">
/*Style 1:*/
/*Just do something simple and obvious, i.e. turn text red*/
body { color: red; }
</style>
接下来,您创建备用样式视图(注意:以下代码片段将单独位于一个单独的文件中),我们将其称为“style2.php”,并且必须与您的其他视图一起放置以便 CI 找到它,例如在“应用程序/视图”文件夹中。这使您可以通过更改加载的样式视图来交换标题中声明的内联样式块:
<style type="text/css">
/*Style 2:*/
/*Just do something simple and obvious, i.e. turn text blue*/
body { color: blue; }
</style>
现在在我们的控制器“example.php”中,我们告诉base.php 将style1.php 文件加载到它的头文件中。我们通过在加载 base.php 视图时将文件名作为参数传递来做到这一点,通过将文件名作为关联数组的元素传递,代码点火器将解析该参数数组并创建一个与关联元素,并在 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);
}
}
?>
累积的结果应该是切换页面标题内样式标签的模块化能力,只需指定要加载的“样式视图”(您甚至可以构建一个模型,从数据库表中检索要加载的“样式视图”)。显然,这种方法在 Web 浏览器内部具有一定的处理开销限制,因为您正在构建实际的内联 HTML 源代码,而不是通过链接标签链接到 CSS 文件。这意味着浏览器不会为每个页面加载缓存 css 内容,但必须在每个后续请求中下载它。