php中contentPlaceHolder的等价物

时间:2012-07-29 07:31:58

标签: php codeigniter

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

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

请注意,此标记中的head标记已关闭。现在,我想在另一个文件中添加<script>标记而不修改header.php。 C#具有ContentPlaceHolder,可用于指示可在头标记中添加标记的位置。在PHP中有任何等价物吗?如果没有,我怎样才能做到这一点?

3 个答案:

答案 0 :(得分: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>

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

答案 1 :(得分: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参数中加入footer(标题,在您的情况下):

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

我的_footer视图运行js()函数,如下所示:

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

这对我来说很有用,可以随意根据自己的需要进行定制。

答案 2 :(得分:0)