【问题标题】:Codeigniter: How to include javascript filesCodeigniter:如何包含 javascript 文件
【发布时间】:2011-04-19 23:16:06
【问题描述】:

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

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

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

谢谢 拉杰

【问题讨论】:

    标签: javascript codeigniter include


    【解决方案1】:

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

    所以,在 view_demo.php 文件中:

    <script type="text/javascript" src="<?=base_url()?>js/jquery.js" ></script>
    <script type="text/javascript" src="<?=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 https://codeigniter.com/user_guide/general/styleguide.html#short-open-tags

    【讨论】:

    • 谢谢 Isern Palaus。我试过这个,但 base_url() 正在回显“example.com”,并为那些 .js 文件提供文件未找到错误。有什么建议吗?
    • 你能发布你的控制器和你的视图吗?如果 base_url() 显示您的网址是正确的。您必须在目录 config 上的文件 config.php 上配置您的 BASE URL,这非常重要!
    • 谢谢伊斯恩。实际上我没有将 config.php 文件中的 config['base_url'] 设置为我的项目 url。我就是这么做的。
    • 嘿!有点晚了,但是... site_url("path/to/your/asset") 将返回您的基本网址,后跟您指定的路径。我认为这比使用 base_url() 手动连接要干净,但两者都能完成工作。
    【解决方案2】:

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

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

    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');
    

    【讨论】:

    • 我也有这样的功能,blog.ipalaus.es/…,非常好用! :)
    • @ipalaus:谢谢!我在我的应用程序中使用过它,效果很好!
    • 这个解决方案仍然有助于 codeIgniter 用户。我不知道为什么社区没有在他们的下一个版本中添加这种方法。无论如何感谢锻炼。 :)
    【解决方案3】:

    我将我的 javascript 存储在我的视图文件夹的子目录中,因此文件路径相对于被调用的视图,我省略了 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;?>
    

    如果您在每个页面上都加载了脚本文件,则可以在页脚视图中对它们进行硬编码,就像其他答案中描述的那样。

    【讨论】:

    • 在执行此操作之前我必须配置任何东西吗?
    • 记住,CI 就是 PHP。除了加载视图之外,我们在这里没有使用任何 CI 功能。这与包含带有脚本标签的 js 文件相同。这种数组技术只允许更动态地加载特殊的 javascript 文件。这样,您只需在每个页面上加载您需要的内容,从而使您的 http 请求更小。
    • 喜欢这个解决方案。我实际上会将它用于其他用途,但它很棒。谢谢。
    【解决方案4】:

    如果您有嵌套视图并且没有将其作为参数传递给子视图/嵌套视图,$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();
                }
        ?>
    

    【讨论】:

      【解决方案5】:

      只要使用标准:

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

      在您的视野中! (当然,不在 PHP 标记内。)我认为 CodeIgniter HTML 助手没有任何功能可以用来替代自己写出 HTML。

      【讨论】:

        【解决方案6】:

        查看 Phil Sturgeon 的 CodeIgniter Template Library。我们在工作中使用它的修改版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-30
          • 2013-09-04
          • 2017-07-21
          • 2010-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多