【问题标题】:How to load a script in a template footer - CodeIgniter如何在模板页脚中加载脚本 - CodeIgniter
【发布时间】:2013-10-08 03:16:28
【问题描述】:

我正在尝试一种更易于维护的方式来构建我的代码,正如 nettuts+ 上的一些教程所学的那样。

我已经成功地将我的页眉和页脚文件与每个页面的主要内容分开,以便它们与每个不同的页面一起加载,从而更容易管理对这两个文件的更改。

我目前想在页脚中添加一些 jQuery 代码,仅用于一页。这是我在思考时遇到的问题。我怎样才能让这个 jQuery 代码只出现在我的页脚中,而不是所有页面?谁能解释一下?

我正在考虑做类似的事情:

<?php if($title = "The jQuery Page"){?>
    <script>
       jquery code here....
    </script>
<?php } ?>

但我认为这被认为是混乱的,因为您使用一种语言来衬托另一种语言。

编辑:这是请求的代码:

在我的控制器中,我调用视图:

 $data['title'] = "The jQuery Page";
    $this->load->view('header', $data);
    $this->load->view('cool_page');
    $this->load->view('footer');

然后在我的页脚中,我只想在这一页页脚中加载一个特定的脚本:

<script src="<?php echo base_url();?>js/jquery-1.10.2.min.js"></script>
        <script>
            $(document).ready(function() {

                /*cool jquery stuff*/

            });
        </script>

【问题讨论】:

  • 可以添加控制器、模板等的代码吗?
  • @quantme 当然可以。

标签: php jquery html codeigniter templating


【解决方案1】:

尝试将view 加载到主view

/application/controllers/test.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Test extends CI_Controller {
  public function index() {
    $data = array(
      'title' => "The jQuery Page", 
      'script' => TRUE // if you omit or comment this variable the 'views/script.php' is not loaded
    );
    $this->load->view('test', $data);
  }
}

/application/views/test.php

<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
  <?php if (isset($script)) { $this->load->view('script'); } ?>
</body>
</html>

/application/views/script.php

<script>
  jquery code here....
</script>

【讨论】:

  • 哇,这是一个非常好的解决方案。我什至不需要 test.php 视图中的 if 条件,因为我可以在需要时从控制器调用脚本视图!这就像在页脚中有一个子页脚。很好的解决方案,谢谢!
【解决方案2】:

您可以指定 JS 作为传递给视图的数据的一部分:

CONTROLLER1

$this->data['js'][] = 'alert(\'Hi\');';
$this->data['js'][] = 'alert(\'Hey\');';

$this->load->view('footer', $this->data);

CONTROLLER2

$this->data['js'][] = 'alert(\'Yo\');';
$this->data['js'][] = 'alert(\'Sup\');';

$this->load->view('footer', $this->data);

页脚视图

if(isset($js) && is_array($js) && count($js) > 0){
    echo '<script>';
    foreach($js as $key=>$value){
        $value;
    }
    echo '</script>';
}

【讨论】:

  • 嗨,这和在视图中检查是否应该执行任何 JavaScript 一样吗?如果我检查标题是否相同并在页脚视图中做出条件语句以查看标题是否是正确的页面,那也可以吗
  • @a7omiton 是的,这可能会起作用,但您以后会让自己头疼。这也将打破良好的 MVC 设计准则,即本质上将逻辑与表示分离。如果您的网站项目非常小以至于您可以方便地实现您的想法,那么老实说,您可能不需要实现诸如 CodeIgniter 之类的框架的开销
  • 感谢您的建议,这是一个小项目,但我正在考虑使用 CodeIgniter 来增加安全性(因为好吧,谁不需要安全性?)并为未来打下良好的基础如果网站需要扩展。
【解决方案3】:

我认为没有办法围绕脚本制作条件“if”语句,因此我在问题中使用了建议的解决方案。

检查标题是否为所需页面:

<?php if($title = "Photo Albums - Hands of Humanity"):?>

如果是,则将脚本添加到 DOM:

<script>
$(document).ready(function() {

//jquery stuff

});
</script>
<?php endif;?>

如果还有其他更好的可维护性方法,我会很高兴听到它们

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多