我们说我有一个索引模块(模型视图和控制器)
在索引页面上,我想使用Highchart作为例子
最简单的做法是在我的模板上加上highchart.js。
但是,如果我不想在其他页面上包含highchart.js,该怎么办?
如果我在模板上包含我的所有插件,那将是一种浪费,而且页面可能需要更长的时间才能加载。
Codeigniter 3中是否有任何方法仅在需要时加载插件?
答案 0 :(得分:1)
这完全是您在哪个页面上的句柄,您必须加载哪个插件。您可以动态包含js,css。您可以在所有视图页面中静态提及js或css应包含哪些内容,或者您可以将其传递给控制器。
这是一些参考。希望它会有所帮助:
1)Codeigniter - how to include a dynamic javascript file in a view
2)how to load css, js dynamically in codeigniter
答案 1 :(得分:0)
首先将分类插件包含在3个(或更多插件所需的插件数)类别中: -
1)经常使用(包含在60-100%页面中)
2)很少使用(包含在20-60%的页面中)
3)一次或不超过2-5页
为前2个类别创建单独的模板&包括你需要的地方。
最后一种类型包括
答案 2 :(得分:0)
在模板库中添加一个函数来加载JS文件:
public function set_js($name, $src)
{
$src = htmlspecialchars(strip_tags($src));
$this->_js[$name] = '<script src="'.$src.'"></script>';
return $this;
}
用作:
$this->template->set_js('js-file', base_url() .'assets/vendor/js-file/js-file.min.js');
在您的控制器中。
在您的布局中,您可以添加
<?php print $template['js']; ?>
答案 3 :(得分:0)
最后我使用HMVC,然后我创建了自己的核心控制器作为MY_Controller,然后在这个类下我编写了函数来获取带有switch case的插件。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Controller extends MX_Controller
{
public function __construct()
{
parent::__construct();
$this->load->module("Template");
}
public function include($plugin)
{
switch ($plugin) {
case 'highcharts':
return "global/plugins/js/highcharts.js";
break;
}
}
}
然后在我的模块控制器中我扩展核心控制器,然后我把它放在一个数组中,所以如果我有多个插件,我可以将它们包含在数组中。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Ookla extends MY_Controller {
public function index()
{
$data["js"] = [
$this->include('highcharts') // <- here
];
$data["main_content"] = "ookla/ookla";
$this->template->master_template($data);
}
}
然后在我的master_template视图中,只要它在数组中有插件,我就会循环它。
...
<?php
if(isset($js)){
foreach ($js as $item) {
echo "<script type='text/javascript' src='".base_url()."assets/".$item."'></script>";
}
}
?>
</body>
</html>
谢谢你们的见解。