2

我正在使用 codeigniter 2,我的主题文件夹由jsimgcss文件夹组成。

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 的正确方法吗?

4

3 回答 3

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>
于 2012-04-11T17:17:05.877 回答
2

如果要生成动态js,css文件。使用标准的 MVC 方法。在文件夹中创建一个view名为 js 或 css 的文件夹。创建 js 或 css 文件作为 php 视图文件。例如:slider.js.php

做一个控制器themejs.php。使用路由将所有 js 或 css 文件转发到您需要的控制器。在这个控制器内部进行动态操作,将变量传递给 js、css 视图文件。并用标题打印它们

于 2012-04-11T15:15:07.843 回答
0

base_url()是 CI url helper 的一个功能部分。如果您想在该文件中使用它并且不想创建 $CI 对象的实例,则必须实现您自己的该函数版本。

于 2012-04-11T18:40:33.200 回答