2009-11-22 2 views
2

Так что я новичок в таких вещах - я только начал развиваться с CodeIgniter, и я пытаюсь интегрировать библиотеки javascript. Тем не менее, у меня установлен мой .htaccess, так что все запросы получают /index.php/ перед ним, что затрудняет включение файлов. Для CSS я просто использую php include, чтобы обойти эту проблему и иметь ее встроенную, что в любом случае быстрее. Но это выглядит плохой идеей для javascript-библиотек.Библиотеки CodeIgniter и JS

Любые мысли? Должен ли я просто создать папку index.php/и вставить ее там?

Спасибо!
Мала

ответ

8

Вы можете избежать правила перезаписи, просто добавив условие к нему:

RewriteCond $1 !^(index\.php|images|scripts|styles|robots\.txt) 

Затем вы можете поместить все ваши скрипты, изображения и т.д., в вашем DOCROOT.

Для получения дополнительной информации см. Apache Rewrite docs.

+0

спасибо! это решает мою проблему и некоторые другие, которые у меня были слишком :) – Mala

1

Я на самом деле использовать контроллер ресурсов, чтобы принести во всех моих внешних файлов:

class Resources extends Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function javascript() 
    { 
     $arr = func_get_args(); 
     if(sizeof($arr) == 0) 
     { 
      show_404(); 
      return; 
     } 
     if(is_numeric($arr[ sizeof($arr) - 1 ])) 
     { 
      array_pop($arr); 
     } 
     $name = implode("/", $arr); 
     $this->load->view("javascript", array("importscript" => $name)); 
    } 
    public function css() 
    { 
     $arr = func_get_args(); 
     if(sizeof($arr) == 0) 
     { 
      show_404(); 
      return; 
     } 
     if(is_numeric($arr[ sizeof($arr) - 1 ])) 
     { 
      array_pop($arr); 
     } 
     $name = implode("/", $arr); 
     $this->load->view("css", array("importscript" => $name)); 
    } 
    public function image() 
    { 
     $arr = func_get_args(); 
     if(sizeof($arr) == 0) 
     { 
      show_404(); 
      return; 
     } 
     if(is_numeric($arr[ sizeof($arr) - 1 ])) 
     { 
      array_pop($arr); 
      // if the last item is a number, that means it was 
      // automatically generated to prevent caching 
     } 
     $name = implode("/", $arr); 
     $this->load->view("images", array("importscript" => $name)); 
    } 
} 

Различные виды все что-то вроде этого:

$import = dirname(__FILE__) . "/javascript/$importscript"; 
if(!showjs($import) && is_dir($import)) 
{ 
    if(!showjs("$import/$importscript")) 
    { 
     show_404(); 
    } 
} 

function showjs($imp) 
{ 
    if(is_file("$imp.js")) 
    { 
     header('Content-type: application/javascript'); 
     echo "/*----- Imported into PHP so JavaScript can all be dynamically declared -----*/\n\n"; 
     echo file_get_contents("$imp.js"); 
     return true; 
    } 
    elseif(is_file("$imp.php")) 
    { 
     header('Content-type: application/javascript'); 
     echo "/*----- Imported into PHP so JavaScript can all be dynamically declared -----*/\n\n"; 
     include_once("$imp.php"); 
     return true; 
    } 
    return false; 
} 

Как вы можете видеть, контроллер передает имя файла в представление. Затем в представлении отображается, есть ли файл js или файл php, связанный с переменной importcript. Если есть, он устанавливает заголовки, а затем отображает файлы.

+0

Это выглядит очень полезно, но для меня это слишком много. – Mala

1

Если вы используете mod_rewrite, просто добавьте RewriteCond перед своим RewriteRule. Например:

RewriteCond %{REQUEST_URI} !\.(css|js|jpe?g|png|gif)$ 
RewriteRule ^([^/]+)/([^/]+)/? index.php?ctrl=$1&event=$2 [L,QSA] 
0

Может быть, я что-то missunderstanding, но почему бы не просто включить JavaScript библиотеки с абсолютные URL'ы

<script type="text/javascript" src="/js/javascript.js"></script> 

То же самое с помощью CSS

<link rel="stylesheet" type="text/css" href="/css/main.css"> 

если вы начинаете в документ root, используя /, тогда у вас не возникнут проблемы с поиском файлов.

+0

, потому что, когда браузер пользователя отправляет запрос на /js/javascript.js, он будет перенаправлен в /index.php/js/javascript.js – Mala

+0

нет если ваш сервер настроен правильно – Galen