2013-08-06 46 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)。 –