Codeigniter - 在特定视图上加载特定的JS库

时间:2011-02-04 06:33:43

标签: php javascript codeigniter

我正在尝试加载Google地图API,即:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true">

在我的头模板中。但是因为我只有一个页面上有谷歌地图(我宁愿没有所有文件的API加载),我如何将消息从控制器发送到我希望加载此特定的视图JS文件?

感谢您的帮助。

5 个答案:

答案 0 :(得分:4)

CodeIgniter有一个segment类。您可以运行一些代码:

<?php if($this->uri->segment(1) == 'map') { ?>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true">
<?php } ?>

在页面http://yoursite.com/map/上,它将加载脚本。

答案 1 :(得分:4)

一种解决方案是使用具有javascript / css“注入”的模板库 - 请参阅:

http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html#utilities

$this->template->add_js('js/jquery.js');
$this->template->add_js('alert("Hello!");', 'embed');

了解更多信息。

如果您不想使用模板库,请执行以下操作:

*假设在“Map”控制器上,并且您需要在默认页面上使用JS文件。

class Map extends CI_Controller {

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        $scripts = array(
    '<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true">' . "\n", 
    '<script>something</script>');
       /* this method lets you add multiple...*/

        $data['scripts'] = $scripts;
        $this->load->view('my_map/index', $data);
    }
}
在您看来

if(isset($scripts))
{
    foreach($scripts as $script)
    {
        echo $script;
    }
}

基本上你构建一个脚本文件/ css文件数组(无论如何),然后检查它的存在并将其转储到视图的head部分。

我个人会选择模板选项。

另请注意CI2.0有一个新的javascript driver可能值得一读

答案 2 :(得分:1)

<?php

/**
 * Head files loader
 * @author azhar
 **/

function headscripts($path)
{
    if(is_string($path))
    {
        echo "<script type='text/javascript' src='". base_url($path) ."'></script>\n";
    }elseif(is_array ($path)){
        foreach ($path as $p) {
            echo "<script type='text/javascript' src='". base_url($p) ."'></script>\n";
        }
    }
}

function headlinks($path)
{
    if(is_string($path))
    {
        echo "<link rel='stylesheet' href='". base_url($path) ."'/>\n";
    }elseif(is_array ($path)){
        foreach ($path as $p) {
            echo "<link rel='stylesheet' href='". base_url($p) ."'/>\n";
        }
    }
}
?>

将此文件添加到名为head_helper的helper_directory中。在操作系统内的控制器中使用此代码

$data['headscripts'] = array('js/main.js');

在您的视图文件中使用此功能

headscripts($headscripts);

对于样式表,请使用此

headlinks($headlinks);

是的,不要忘记在配置文件夹中使用autoload.php文件加载帮助器

$autoload['helper'] = array('url', 'file','head');

答案 3 :(得分:0)

感谢你们的回答,在我找到你们的答案之前,我最后做了Ross和leaf dev的混合建议,所以我想我是在正确的轨道上。

我的控制器有:

$data['head'] = array('specificjs');
$this->load->view('view',$data);`

我的观点是:

if(isset($head)){
    foreach($head as $item){
        $this->load->view('js/'.$item);
    }
}

我的'specificjs'视图有所需要的内容。

这样我就可以加载任意数量的自定义脚本,并让视图中的代码不是控制器。

再次感谢,但请继续提出进一步的建议!

答案 4 :(得分:-2)

为此写一个帮手。将脚本名称传递给数组,并在辅助函数内部迭代它们并打印脚本