2013-08-06 103 views
0

我在我的JavaScript文件中使用PHP和我的.htaccess看起来像负载笨环境中的JavaScript文件

<FilesMatch "\.css$"> 
    SetHandler application/x-httpd-php 
    Header set Content-type "text/css" 
</FilesMatch> 

<FilesMatch "\.js$"> 
    SetHandler application/x-httpd-php 
    Header set Content-type "application/javascript" 
</FilesMatch> 

我现在可以使用PHP从我的JavaScript文件中,但笨功能不工作。对于例如

$('#example').dataTable({ 
     "bProcessing": true, 
     "sAjaxSource": "<?php $CI = get_instance(); echo base_url(); ?>" 
    }); 

给出了错误

<b>Fatal error</b>: Call to undefined function get_instance() in <b>C:\xampp\htdocs\_init\assets\js\custom.js</b> on line <b>88</b><br /> 

我想也许我需要加载笨ENV以类似于wordpress的方式进行处理require('../wordpress/wp-load.php');

有没有一种方法可以以类似的方式加载codeigniter,以便codeigniter函数可用于我的javascript和css文件?

+0

你也应该确保你专门发送无缓存标头与这些“文件”沿着这样浏览器不缓存CSS和js认为这些文件是典型的静态文件。当然,从用户的角度来看,这可能会显着影响您的网站性能,所以我真的会质疑整个方法。例如,在JS代码片段中没有理由,您无法在JS全局范围中为'sAjaxSource'定义一个可以在静态js文件中引用的变量。 –

+0

感谢您的评论。我已经重新考虑了方法,并一起放弃了这个计划。在它的位置,我将只是通过url'“sAjaxSource”加载我需要的东西:'http:// localhost/_init/assets/static_content/arrays.txt'' –

+0

我喜欢这两个用户SO名称:|这就是coooolll! –

回答

3

CI依赖自举system/core/CodeIgniter.php揭开序幕应用..

没有一个神奇的文件,您可以包括将让您使用功能..

解决方案1:base_url问题最好的解决办法是增加一个基础标签as described by Phil Sturgeon..

<base href="<?php echo base_url(); ?>">

解决方案2:在一个视图中定义一个js BASE_URL

<script> 
    var base_url = "<?php echo base_url(); ?>"; 
</script> 

在你的js,你会访问它像..

$('#example').dataTable({ 
    "bProcessing": true, 
    "sAjaxSource": base_url 
}); 

你所要求的:

如果你依赖于你的js和css中的CI函数,那么你的方法应该被重新探讨,不过,这里是一个可能的解决方案..

创建一个控制器application/controllers/js.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class js extends CI_Controller { 
    public function index() 
    { 
     $this->load->view('js'); 
    } 
} 

创建一个视图application/views/js.php

$('#example').dataTable({ 
    "bProcessing": true, 
    "sAjaxSource": "<?php echo base_url(); ?>" 
}); 
+0

由于建议的编辑可能会被拒绝,您可以找到第三个解决方案的改进版本(在这里)(https://gist.github.com/HashemQolami/6169106)。 –