我正在处理我的第一个代码点火器项目。我有一些javascript,我需要编写以启动文档就绪的实例。这是一次性的,永远不会被再次召唤。我需要将它包含在头部,但可能存在我需要在身体末端进行此操作的情况。所以,举个例子,假设我有这个:
<script>
alert('this is a one off alert');
</script>
做这些事情的最佳做法是什么?把它放在控制器中是否可以接受?是否需要为它编写模型?或者我是否需要为MVC中的每个脚本创建单独的视图?
感谢。
答案 0 :(得分:1)
所有视图文件都加载了一个公共标题。并且视图文件在控制器的末尾加载。
您可以硬编码或传递要从控制器启动的脚本的链接。对脚本标签进行硬编码是不言自明的。如果您想更动态地执行此操作,可以设置一个脚本源数组,并在标头中循环它们。
所以在控制器中
$data['scripts'] = array();
$data['scripts'][] = 'http://yoursourcehere';
或者如果是自托管:
$data['scripts'][] = site_url('assets/js/yourscript.js');
然后是视图
if(isset($scripts))
{
foreach($scripts as $script)
{
echo '<script type="text/javascript" src="'.$script.'"></script>';
}
}
所以基本上你可以将所有自定义脚本放在一个单独的文件中,然后以这种方式加载它。它很实用,因为它可以以通用方式一次加载所有脚本。
答案 1 :(得分:1)
JS是HTML的一部分,因此它不应该在控制器或模型中,因此它应该在视图中,因为您使用框架然后您应该将它保存在单独的文件中,您可以为每个方法提供单独的文件你的控制器或每个控制器的一个JS文件。
你也可以在你的核心文件夹中创建一个base_controller并用它扩展你的所有控制器,在那里你可以设置所有默认的JS和CSS。因此,如果您为控制器调用索引方法,它将使用默认的JS和CSS加载,如果需要添加任何新的,只需从控制器传递它,如John B所说
您可以在帮助文件中使用此功能
/**
* getting js files from public folder
* @param array $js
* @return string
*/
function js_tag($js) {
$out = "";
if (!empty($js)) {
$js = array_reverse($js);
foreach ($js as $j) {
if (strstr($j, "http:") == "" && strstr($j, "https:") == "") {
if ($j == 'tinymac') {
$out.='<script type="text/javascript" src="' . base_url() . 'jscripts/tiny_mce/tiny_mce.js"></script>' . "\n";
} else {
$out.='<script type="text/javascript" src="' . base_url() . 'public/js/' . $j . '"></script>' . "\n";
}
} else {
$out.='<script type="text/javascript" src="' . $j . '"></script>' . "\n";
}
}
}
$out .= '<script type="text/javascript"> var baseurl = "' . base_url() . '"</script>' . "\n";
return $out;
}
/**
* getting css files from public folder
* @author Amir M
* @param array $css
* @return string
*/
function css_tag($css) {
$out = "";
if (!empty($css)) {
$css = array_reverse($css);
foreach ($css as $c) {
if (strstr($c, "http:") == "" && strstr($c, "https:") == "") {
$out.= link_tag(base_url() . "public/css/" . $c) . "\n";
} else {
$out.= link_tag($c) . "\n";
}
}
}
return $out;
}
你可以从控制器中调用它
public function index(){
$data['js'] = js_tag('one.js', 'two.js' , 'jquery.js');
$data['css'] = css_tag('one.css', 'two.css' , 'jquery-ui.css');
$thuis->load->view('index' , $data);
}
注意:上面的方法将反转数组,因此数组中的最后一个值将首先出现在页面上,所以保持jQuery在数组中的最后一个
在所有网站上常见的标题中
<?php echo $js.$css?>