こんにちはCodeIgniterフレームワークを使い始めたばかりです。私の現在のディレクトリ構造は
Demo(Project name)
+System
+Application
-Controllers
demo.php
+Model
-Views
view_demo.php
-Js
ajax.js
jquery.js
View_demo.phpに.jsファイルを含める方法を教えてください。
ありがとう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
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');
_
ビューパスのサブディレクトリに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;?>
すべてのページにロードされるスクリプトファイルがある場合は、他の回答で説明されているようにフッタービューでハードコードできます。
Phil SturgeonのCodeIgniter Template Libraryをご覧ください。私たちは職場でその修正版を使用しています。 http://philsturgeon.co.uk/code/codeigniter-template
ネストされたビューがあり、子/ネストされたビューへの引数として渡さない場合、$ 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を自分で書き出す代わりに使用できる機能があるとは思いません。