2010-08-13 2 views
0

Я играю с этим comb.php file, и это выглядит красиво, но мне интересно, есть ли работа для моей проблемы.объединение css и js файлов + css images

теперь у меня меньше сценариев и ссылки тегов для моих ресурсов, которые выглядят и работают, как они должны

<script type="text/javascript" src="http://path/to/server/javascript/libjs/jqueryui/1.8/development-bundle/ui/minified/jquery.ui.core.min.js,libjs/jqueryui/1.8/development-bundle/ui/minified/jquery.ui.widget.min.js,libjs/jqueryui/1.8/development-bundle/ui/minified/jquery.ui.datepicker.min.js,libjs/plugins/cluetip/1.0.6/jquery.cluetip.js,libjs/plugins/cluetip/1.0.6/lib/jquery.hoverIntent.js,libjs/plugins/cluetip/1.0.6/lib/jquery.bgiframe.min.js"></script> 
<link rel="stylesheet" type="text/css" href="http://path/to/server/css/libjs/jqueryui/1.8/development-bundle/themes/base/jquery.ui.core.css,libjs/jqueryui/1.8/development-bundle/themes/base/jquery.ui.theme.css,libjs/jqueryui/1.8/development-bundle/themes/base/jquery.ui.datepicker.css,libjs/plugins/cluetip/1.0.6/jquery.cluetip.css" > 

однако, изображения, которые включены в таблицу стилей с относительным путем, иногда не появляются - это зависит от того, в котором таблица стили включены: т.е.

background: url(images/ui-bg_flat_75_ffffff_40x100.png) 

конкретная виновника на руку, что я работаю с имеет дело ж/jqueryui datepicker сценария и cluetip сценария.

Изображения для DatePicker есть запрос URLs как этот

http://path/to/server/css/libjs/jqueryui/1.8/development-bundle/themes/base/jquery.ui.core.css,libjs/jqueryui/1.8/development-bundle/themes/base/jquery.ui.theme.css,libjs/jqueryui/1.8/development-bundle/themes/base/jquery.ui.datepicker.css,libjs/plugins/cluetip/1.0.6/images/ui-bg_flat_75_ffffff_40x100.png 

где изображение мыслит путь от последнего включенного сценария (libjs/плагины/cluetip/1.0.6 /), в то время как его на самом деле от более ранний скрипт (libjs/jqueryui/1.8/development-bundle/themes/base /)

Я не хочу менять какие-либо внешние ресурсы на абсолютные пути. Есть ли обходной путь для этой проблемы? есть ли лучший способ справиться с этой ситуацией?

ответ

4

ОК, вот что я сделал. Поскольку файл comb.php создает сжатый файл кеша с уникальным именем для заголовка Etag, я решил, что могу динамически обновлять пути изображения до абсолютного пути при создании файла кэша. поэтому я немного изменил сценарий, чтобы переписать относительные пути в абсолютные пути, что позволяет мне сохранять любые новые/обновленные плагины нетронутыми и дает мне конечный результат, который мне нужен.

мой переписывают взял часть файла combine.php так:

while (list(, $element) = each($elements)) { 
    $path = realpath($base . '/' . $element); 
    $contents .= "\n\n" . file_get_contents($path) 
} 

в этом: (NB $ glmBaseUrl является динамически созданный URL для сервера это скрипты включены.)

while (list(, $element) = each($elements)) { 
    $path = realpath($base . '/' . $element); 

    $fileContents = file_get_contents($path); 
    if ($type == 'css') { 
     subDir = dirname($element); 
     $fileContents = preg_replace(
      '/url\((.+)\)/i', 
      'url(' . $glmBaseUrl . $subDir . '/$1)', 
      $fileContents 
     ); 
    } 
    $contents .= "\n\nfileContents"; 
} 
0

Вы можете просто заменить / на что-то еще (я использую : в приведенном ниже примере) на пути и перевести его обратно на сервер.

Например, вместо

http://path/to/server/css/libjs/jqueryui/1.8/development-bundle/themes/base/jquery.ui.core.css,libjs/jqueryui/1.8/development-bundle/themes/base/jquery.ui.theme.css,libjs/jqueryui/1.8/development-bundle/themes/base/jquery.ui.datepicker.css,libjs/plugins/cluetip/1.0.6/jquery.cluetip.css 

это будет выглядеть

http://path/to/server/css/libjs:jqueryui:1.8:development-bundle:themes:base:jquery.ui.core.css,libjs:jqueryui:1.8:development-bundle:themes:base:jquery.ui.theme.css,libjs:jqueryui:1.8:development-bundle:themes:base:jquery.ui.datepicker.css,libjs:plugins:cluetip:1.0.6:jquery.cluetip.css 

Он будет держать пути постоянной, независимо от того, включения, хотя вам все равно придется изменить пути в файлы (или переместить сами файлы), поскольку каждый путь будет относиться к http://path/to/server/css/. Но, по крайней мере, они не должны быть абсолютными.

Смежные вопросы