2

我正在使用 PHP 和 CodeIgniter。在每个视图文件中,我都包含header.php,如下所示:

<head>
  <link rel="...">
  <script type="text/javascript">...</script>
</head>

请注意,此文件中的 head 标记已关闭。现在我想<script>在另一个文件中添加一个标签而不修改header.php. C# 具有ContentPlaceHolder可用于指示可以在 head 标记中添加标记的位置。php中是否有任何等价物?如果没有,我该如何实现?

4

3 回答 3

2

您可以通过在控制器中添加单个变量来轻松地在标题中添加其他脚本,如下所示:

控制器:

$data['myScript'] = '<link rel="..."><script type="text/javascript">...</script>';
$this->load->view('myView',$data);

然后在你的 header.php 中添加:

<head>
  <link rel="...">
  <script type="text/javascript">...</script>
  <?php if (isset($myScript)) echo $myScript; ?>
</head>

这为每个视图创建了一个非常可定制的模板,因为您只能在需要它们的视图中添加脚本。

于 2012-07-29T08:50:19.957 回答
1

这是我通常对任何 CodeIgniter 项目所做的事情......

我扩展了 HTML 帮助程序 ( application/helpers/MY_html_helper.php) 以包含一个js()函数:

function js($js)
{
    $js_base_path = '';

    // If you have multiple JS files, pass an array
    if(is_array($js))
    {
        foreach($js as $script_src)
        {
            if(strpos($script_src, 'http://') === false && strpos($script_src, 'https://') === false)
            {
                $js_base_path = base_url() . 'js/';
            }
            echo '<script src="' . $js_base_path . $script_src . '"></script>';
        }
    }

    // Otherwise, a string will do
    else
    {
        if(strpos($js, 'http://') === false && strpos($js, 'https://') === false)
        {
            $js_base_path = base_url() . 'js/';
        }
        echo '<script src="' . $js_base_path . $js . '"></script>';
    }
}

在我的控制器中,我将在页脚(在您的情况下为页眉)包含一个js参数:

$this->load->view('_footer', array('js'=>'jquery.cycle.lite.js'));

我的_footer视图运行这样的js()功能:

<?php
if(isset($js))
{
    $this->load->helper('html');
    js($js);
}
?>

这对我来说非常有用,请随时根据您的需要对其进行自定义。

于 2012-07-29T08:52:34.037 回答
0

Phil Sturgeon 的模板库为此提供了一些方便的功能:http: //philsturgeon.co.uk/demos/codeigniter-template/user_guide/library.html#prepend_metadata

于 2012-07-29T19:30:34.070 回答