필자가 필요로하는 추상적 인 CSS 변환을 허용하기 위해 Minify에서 일부 코드를 리팩토링하기로 결정했습니다.
<?php
//This class is heavy borrowed from Minify_ImportProcessor
class CSSImporter
{
static function changePaths($content, $current_path, $target_path)
{
$current_path = rtrim($current_path, "/");
$target_path = rtrim($target_path, "/");
$current_path_slugs = explode("/", $current_path);
$target_path_slugs = explode("/", $target_path);
$smallest_count = min(count($current_path_slugs), count($target_path_slugs));
for($i = 0; $i < $smallest_count && $current_path_slugs[$i] === $target_path_slugs[$i]; $i++);
$change_prefix = implode("/", array_merge(array_fill(0, count($target_path_slugs) - $i, ".."), array_slice($current_path_slugs, $i)));
if(strlen($change_prefix) > 0) $change_prefix .= "/";
$content = preg_replace_callback(
'/
@import\\s+
(?:url\\(\\s*)? # maybe url(
[\'"]? # maybe quote
(.*?) # 1 = URI
[\'"]? # maybe end quote
(?:\\s*\\))? # maybe)
([a-zA-Z,\\s]*)? # 2 = media list
; # end token
/x',
function($m) use ($change_prefix) {
$url = $change_prefix.$m[1];
$url = str_replace('/./', '/', $url);
do {
$url = preg_replace('@/(?!\\.\\.?)[^/]+/\\.\\[email protected]', '/', $url, 1, $changed);
} while($changed);
return "@import url('$url'){$m[2]};";
},
$content
);
$content = preg_replace_callback(
'/url\\(\\s*([^\\)\\s]+)\\s*\\)/',
function($m) use ($change_prefix) {
// $m[1] is either quoted or not
$quote = ($m[1][0] === "'" || $m[1][0] === '"')
? $m[1][0]
: '';
$url = ($quote === '')
? $m[1]
: substr($m[1], 1, strlen($m[1]) - 2);
if('/' !== $url[0] && strpos($url, '//') === FALSE) {
$url = $change_prefix.$url;
$url = str_replace('/./', '/', $url);
do {
$url = preg_replace('@/(?!\\.\\.?)[^/]+/\\.\\[email protected]', '/', $url, 1, $changed);
} while($changed);
}
return "url({$quote}{$url}{$quote})";
},
$content
);
return $content;
}
}
?>
css 파일이 이미 있으므로 옵션이 아닙니다. 나는 여전히 프로그램을 계속 유효하게하면서 프로그래밍 방식으로 움직이는 방법을 찾고 있습니다. –
또한 사이트베이스가'/'이 될 수 없기 때문에 제 경우에는 절대 경로를 사용할 수 없습니다. –
그들은 항상/뭔가있을거야. 자신의 도메인 또는 하위 도메인에서 /와 관련이 있으며/하위 디렉토리에 있으면/하위 디렉토리가됩니다. – GordonM