Codeigniter:如何包含javascript文件

时间:2010-10-01 16:46:03

标签: javascript codeigniter include

您好我刚开始使用CodeIgniter框架。我当前的目录结构是

Demo(Project name)
 +System
 +Application
   -Controllers
      demo.php
   +Model
   -Views
      view_demo.php
 -Js
    ajax.js
    jquery.js  

请告诉我如何在view_demo.php中包含.js文件。

由于 拉吉

6 个答案:

答案 0 :(得分:25)

您需要使用base_url()在您的视图中包含javascript文件。

所以,在view_demo.php文件中:

<script type="text/javascript" src="<?php echo base_url();?>js/jquery.js" ></script>
<script type="text/javascript" src="<?php echo base_url();?>js/ajax.js" ></script>

您需要加载URL帮助程序。要加载你需要放在demo.php控制器上的助手:

$this->load->helper('url');

你也可以在helpers数组上的\ config \ autoload.php上自动加载。

有关base_url()的更多信息:http://www.codeigniter.com/user_guide/helpers/url_helper.html#base_url

答案 1 :(得分:20)

您不会在PHP中包含JS文件,它们将作为您生成的HTML中的脚本标记输出,您可能将其作为PHP脚本的输出生成。

据我所知,没有内置CodeIginiter函数来包含此输出,就像使用CI提供的link_tag()函数的CSS一样。我在CI的script_tag()文件中添加了一个名为system/helpers/html_helper.php的函数。功能是:

if ( ! function_exists('script_tag')) {
    function script_tag($src = '', $language = 'javascript', $type = 'text/javascript', $index_page = FALSE)
    {
        $CI =& get_instance();
        $script = '<scr'.'ipt';
        if (is_array($src)) {
            foreach ($src as $k=>$v) {
                if ($k == 'src' AND strpos($v, '://') === FALSE) {
                    if ($index_page === TRUE) {
                        $script .= ' src="'.$CI->config->site_url($v).'"';
                    }
                    else {
                        $script .= ' src="'.$CI->config->slash_item('base_url').$v.'"';
                    }
                }
                else {
                    $script .= "$k=\"$v\"";
                }
            }

            $script .= "></scr"."ipt>\n";
        }
        else {
            if ( strpos($src, '://') !== FALSE) {
                $script .= ' src="'.$src.'" ';
            }
            elseif ($index_page === TRUE) {
                $script .= ' src="'.$CI->config->site_url($src).'" ';
            }
            else {
                $script .= ' src="'.$CI->config->slash_item('base_url').$src.'" ';
            }

            $script .= 'language="'.$language.'" type="'.$type.'"';
            $script .= ' /></scr'.'ipt>'."\n";
        }
        return $script;
    }
}

然后在您的PHP代码中,您可以这样做:

echo script_tag('content/js/jquery-1.4.2.js');

答案 2 :(得分:9)

我将javascript存储在view文件夹的子目录中,因此文件路径与被调用的视图相对,我省略了base_url()。

我采用的另一种技术是定义要包含在我的控制器中的脚本数组,然后在我的视图中循环遍历数组以包含它们。这允许我仅在需要时包含专业js功能。

$data['scripts to load'] = array('edit.js','menu.js', 'contact.js');
$this->load->view('myview');

然后在视图中

 <?php  foreach($scripts_to_load as $script):?>
           <script type='text/javascript' src = 'my_js/<?php echo $script;?>'>
 <?php endforeach;?>

如果您有在每个页面上加载的脚本文件,您可以在页脚视图中对其进行硬编码,如其他答案中所述。

答案 3 :(得分:1)

查看Phil Sturgeon的CodeIgniter模板库。我们在工作中使用它的修改版本。 http://philsturgeon.co.uk/code/codeigniter-template

答案 4 :(得分:0)

只需使用标准:

<script src="/path/to/file.js" type="text/javascript" charset="utf-8"></script>

在你的视野内! (当然不在PHP标记内部。)我不认为CodeIgniter HTML帮助程序有任何可以用来替代自己编写HTML的函数。

答案 5 :(得分:0)

如果您有嵌套视图,并且没有将其作为参数传递给子视图/嵌套视图,则$ data变量有时可能会丢失。

我找到了一个对我来说非常顺利的简单解决方案:

在当前视图文件中,您可以这样设置脚本:

$ this-> scripts [] ='/js/myscript.js';

在页脚或{whatever.php}文件中插入以下代码:

    <?php
        if(isset($this->scripts))
        foreach($this->scripts as $script) :
     ?>
            <script src="my_asset_path/js/<?=$script;?>"></script>
    <?endforeach;?>

如果您只需要一些javascript代码,则始终可以使用这样的匿名函数:

<?php
$this->RenderScript[] = function() {
?>
      <script>
        console.log('myjavascript code snippet');
      </script>
<?}?>

并在底部:

<?php
        if(isset($this->RenderScript))
            foreach($this->RenderScript as $script) {
                $script();
            }
    ?>
相关问题