web-dev-qa-db-ja.com

Codeigniter:javascriptファイルを含める方法

こんにちはCodeIgniterフレームワークを使い始めたばかりです。私の現在のディレクトリ構造は

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

View_demo.phpに.jsファイルを含める方法を教えてください。

ありがとうRaj

18
Raj

VIEWにjavascriptファイルを含めるには、base_url()を使用する必要があります。

そのため、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');

ヘルパー配列の\ config\autoload.phpで自動ロードすることもできます。

Base_url()の詳細: http://www.codeigniter.com/user_guide/helpers/url_helper.html#base_url

26
ipalaus

PHP内にJSファイルを含めないでください。これらは、PHPスクリプトからの出力として生成する可能性のある、生成するHTML内のスクリプトタグとして出力されます。

私が知る限り、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');
_
22
RC.

ビューパスのサブディレクトリに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;?>

すべてのページにロードされるスクリプトファイルがある場合は、他の回答で説明されているようにフッタービューでハードコードできます。

9
kevtrout

Phil SturgeonのCodeIgniter Template Libraryをご覧ください。私たちは職場でその修正版を使用しています。 http://philsturgeon.co.uk/code/codeigniter-template

1
Anthony Jack

ネストされたビューがあり、子/ネストされたビューへの引数として渡さない場合、$ 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();
            }
    ?>
1
Bruno

標準を使用するだけです:

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

あなたの視野の中に! (もちろん、PHPタグ内ではありません。)CodeIgniter HTMLヘルパーには、HTMLを自分で書き出す代わりに使用できる機能があるとは思いません。

0
chigley