将额外脚本从视图传递到标头

时间:2012-04-13 18:05:39

标签: php codeigniter

所以我基本上试图将<link><script>标签从模块视图文件(显示在页面正文中)传递到我的原始头文件中。如何传递包含这些引用的变量?

目前我只是在我的模块视图中添加了额外的<head></head>标签,但这样做感觉很麻烦和狡猾,因为这意味着头部标签在页面顶部使用,并且下来。

编辑: 没有意识到堆栈溢出已编辑出我对此问题至关重要的标记!对不起伙计们!

2 个答案:

答案 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内容,但必须在每个后续请求中下载它。