2012-04-11 3 views
2

Я использую CodeIgniter 2 и у меня есть моя тема папка состоит из JS, IMG, CSS папки.Использование внешних JS с расширением .php в Codeigniter

Внутри 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 /> 

Что случилось? Разве это не правильный способ использования php во внешнем файле js/php?

+0

Является ли 'js_functions.php' автономным файлом или он включает в себя другие файлы? Если он является автономным, как он знает, что такое 'base_url()'? – TRiG

+0

@TRiG не содержит файлов. Я думаю, это вопрос, который вы упомянули: как он может знать, что он работает в кодеригнере? –

+0

Ну, это твоя проблема, но я недостаточно знаком с CodeIgnitor, чтобы знать, как ее исправить. Что вы ожидаете от '$ this' в контексте этого скрипта? – TRiG

ответ

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> 
2

Если вы хотите создать динамические файлы js, css. Используйте стандартный MVC-метод. Создайте папку в папке view с именем js или css. Создавайте файлы js или css в виде файла просмотра php. Например: slider.js.php.

Изготовление контроллера themejs.php. Переместите все файлы js или css на этот контроллер, который вам нужен, используя маршрутизацию. И внутри этого контроллера сделать динамическое действие, передать varibles в js, css просматривать файлы. И напечатайте их заголовком

+0

Спасибо, кажется, мне нужно их разделить –

0

base_url() функция часть хелпера CI URL. Если вы хотите использовать его в этом файле, и вы не хотите создавать экземпляр объекта $ CI, вам придется реализовать свою собственную версию этой функции.

+1

помогло определить реальную проблему, спасибо. –

+0

Вы также можете взглянуть на внедрение assetic (https://github.com/kriswallsmith/assetic) в ваше приложение. С этим в сочетании с решением для пользовательского контроллера выше вы будете управлять активами в стиле. – alxbrd