我正在尝试加载Google地图API,即:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true">
在我的头模板中。但是因为我只有一个页面上有谷歌地图(我宁愿没有所有文件的API加载),我如何将消息从控制器发送到我希望加载此特定的视图JS文件?
感谢您的帮助。
答案 0 :(得分:4)
CodeIgniter有一个segment类。您可以运行一些代码:
<?php if($this->uri->segment(1) == 'map') { ?>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true">
<?php } ?>
在页面http://yoursite.com/map/上,它将加载脚本。
答案 1 :(得分:4)
一种解决方案是使用具有javascript / css“注入”的模板库 - 请参阅:
http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html#utilities
$this->template->add_js('js/jquery.js');
$this->template->add_js('alert("Hello!");', 'embed');
了解更多信息。
如果您不想使用模板库,请执行以下操作:
*假设在“Map”控制器上,并且您需要在默认页面上使用JS文件。
class Map extends CI_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$scripts = array(
'<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true">' . "\n",
'<script>something</script>');
/* this method lets you add multiple...*/
$data['scripts'] = $scripts;
$this->load->view('my_map/index', $data);
}
}
在您看来:
if(isset($scripts))
{
foreach($scripts as $script)
{
echo $script;
}
}
基本上你构建一个脚本文件/ css文件数组(无论如何),然后检查它的存在并将其转储到视图的head
部分。
我个人会选择模板选项。
另请注意CI2.0有一个新的javascript driver可能值得一读
答案 2 :(得分:1)
<?php
/**
* Head files loader
* @author azhar
**/
function headscripts($path)
{
if(is_string($path))
{
echo "<script type='text/javascript' src='". base_url($path) ."'></script>\n";
}elseif(is_array ($path)){
foreach ($path as $p) {
echo "<script type='text/javascript' src='". base_url($p) ."'></script>\n";
}
}
}
function headlinks($path)
{
if(is_string($path))
{
echo "<link rel='stylesheet' href='". base_url($path) ."'/>\n";
}elseif(is_array ($path)){
foreach ($path as $p) {
echo "<link rel='stylesheet' href='". base_url($p) ."'/>\n";
}
}
}
?>
将此文件添加到名为head_helper的helper_directory中。在操作系统内的控制器中使用此代码
$data['headscripts'] = array('js/main.js');
在您的视图文件中使用此功能
headscripts($headscripts);
对于样式表,请使用此
headlinks($headlinks);
是的,不要忘记在配置文件夹中使用autoload.php文件加载帮助器
$autoload['helper'] = array('url', 'file','head');
答案 3 :(得分:0)
感谢你们的回答,在我找到你们的答案之前,我最后做了Ross和leaf dev的混合建议,所以我想我是在正确的轨道上。
我的控制器有:
$data['head'] = array('specificjs');
$this->load->view('view',$data);`
我的观点是:
if(isset($head)){
foreach($head as $item){
$this->load->view('js/'.$item);
}
}
我的'specificjs'视图有所需要的内容。
这样我就可以加载任意数量的自定义脚本,并让视图中的代码不是控制器。
再次感谢,但请继续提出进一步的建议!
答案 4 :(得分:-2)
为此写一个帮手。将脚本名称传递给数组,并在辅助函数内部迭代它们并打印脚本