繁体   English   中英

Codeigniter:如何包含 javascript 文件

[英]Codeigniter: How to include javascript files

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

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

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

谢谢拉吉

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

因此,在 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

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

据我所知,没有内置的 CodeIgniter 函数来包含这个输出,就像使用 CI 提供的link_tag()函数的 CSS 一样。 我在 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');

我将我的 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;?>

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

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

只需使用标准:

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

在你的视野中! (当然,不在 PHP 标签内。)我认为 CodeIgniter HTML 帮助程序没有任何功能可以用作替代自己编写 HTML 的功能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM