我正在使用codeigniter 2,我的主题文件夹由 js , img , css 文件夹组成。
在 js 文件夹中,文件名为 js_functions.php 包含:
<?php header("Content-type: text/javascript"); ?>
/**
* GLOBAL VARIABLES & PATHS
*
* path definitions for jquery inline usage
*
*/
var base_url = '<?=base_url();?>';
// ------------------------------------------------------------------------
/**
* jquery.message Global Implementation
*
* Shows message if any session flashdata named message is set
*
*/
<?php if($this->session->flashdata('message')):?>
$(function() { $().message("<?=$this->session->flashdata('message');?>"); });
<?php endif; ?>
// ------------------------------------------------------------------------
并且,在其中调用查看文件
<script type="text/javascript" src="<?=base_url();?>themes/admin/js/js_functions.php"></script>
正确渲染。但它会在chrome的检查屏幕中返回:
var base_url = '<br />
Uncaught SyntaxError: Unexpected token ILLEGAL
并在地址栏中调用页面时在浏览器中显示:
var base_url = '<br />
<b>Fatal error</b>: Call to undefined function base_url() in <b>F:\xampp\htdocs\themes\js\js_functions.php</b> on line <b>11</b><br />
怎么了?这不是在外部js / php文件中使用php的正确方法吗?
答案 0 :(得分:3)
您需要制作一个控制器来获取脚本。可能是js
。在控制器内部,您可以设置内容类型标题并加载包含上述javascript的视图。假设您有一个名为js
class Js extends CI_Controller{
public function js_functions(){
$this->output->set_header('Content-type: text/javascript');
$data = array( 'messages' => $this->session->flashdata('message'));
$this->load->view('jsfunc',$data);
}
}
您可以像这样
在主视图中加载脚本<script src="<?php echo base_url('js/js_functions'); ?>"></script>
答案 1 :(得分:2)
如果您想生成动态js
,css
个文件。使用标准MVC方法。在view
文件夹中创建一个名为js或css的文件夹。将js或css文件创建为php视图文件。例如:slider.js.php
。
制作一个控制器themejs.php
。使用路由将所有js或css文件转发到您需要的控制器。在此控制器内部进行动态操作,将varibles传递给js,css视图文件。并用标题打印它们
答案 2 :(得分:0)
base_url()
是CI网址助手的功能部分。如果您想在该文件中使用它并且您不想创建$ CI对象的实例,则必须实现您自己的该函数版本。