我正在处理我的第一个代码点火器项目。我有一些需要编写的 javascript 来启动文档准备好的实例。这是一个关闭,永远不会再被调用。我需要将它包含在头部,但在某些情况下我需要在正文的末尾执行此操作。因此,例如,假设我有这个:
<script>
alert('this is a one off alert');
</script>
做这些事情的最佳实践是什么?将它放在控制器中是否可以接受?它需要一个模型写作吗?或者我是否需要为要在 MVC 中的每个脚本创建单独的视图?
谢谢。
我正在处理我的第一个代码点火器项目。我有一些需要编写的 javascript 来启动文档准备好的实例。这是一个关闭,永远不会再被调用。我需要将它包含在头部,但在某些情况下我需要在正文的末尾执行此操作。因此,例如,假设我有这个:
<script>
alert('this is a one off alert');
</script>
做这些事情的最佳实践是什么?将它放在控制器中是否可以接受?它需要一个模型写作吗?或者我是否需要为要在 MVC 中的每个脚本创建单独的视图?
谢谢。
通常我使用的做法是这样的:
所有视图文件都加载一个公共标题。并且视图文件在控制器的末尾加载。
您可以硬编码或传递要从控制器启动的脚本的链接。对脚本标签进行硬编码是不言自明的。如果您想更动态地执行此操作,您可以设置一个脚本源数组并在标头中循环它们。
所以在控制器中
$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>';
}
}
所以基本上你可以把你所有的自定义脚本放在一个单独的文件中,然后以这种方式加载它。它很实用,因为它可以以一种通用的方式一次加载所有脚本。
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?>