템플릿을 만드는 데 사용하는 HTML 클래스가 있습니다. 내 클래스는 다음과 같이 작동이 누락 된 문자 나 잘못 인용 속성에 대한 걱정없이 HTML 마크 업의 신속한 개발을 위해 나를 수병합하고자하는 CSS 배열이 있습니다
<?php
$page = \TEST\HTML::dispense(':html');
$page->mainWrapper(':div') //creates a child object by using __call() and sets the "div" model
->id('mainWrapper') //sets id
->style('background','red') //adds a style
->text('blah') //adds a text
->addClass('someClass'); //adds a class
->someSpan(':span')
->addClass('spanClass')->addClass('someClass')
->style('font-size','12pt')
->style('border-bottom','1pt dashed black')
->style('background','red');
?>
. 모든 것이 캐시되고 성능 문제는 없습니다.
이제이 단계를 더 진행하고 싶습니다. 프로덕션 모드에서는 모든 것이 정상적으로 작동하지만 최종 출력을 위해 모든 인라인 "스타일"속성을 제거하고 CSS 파일에서이를 최소화하고 캐시하고 싶습니다. 이제 모든 HTML 객체를 반복하고 태그, ID 및 클래스에 따라 데이터를 집계하는 함수가 있습니다. 내 질문은 : 그 형태로 내 깔끔한 CSS를 배열을 일단 : 나는 관련 CSS 파일 왼쪽하고 그래서
$style['tag']['.class']['#id']['styleKey'] = styleValue
가 어떻게 중복 값을 잘라합니까? 축소 및 gzipping은 나중에 나올 수 있습니다. 이제는 값을 비교하고 덤프하기 전에 배열을 최적화하여 동일한 태그/id/클래스를 가진 모든 요소에 공통된 'styleKeys'를 모두 그룹화합니다.
예를 들어, 두 개의 요소 (div와 span)가 "background : red"스타일과 "someClass"스타일을 공유하기 때문에 "someClass"CSS 규칙에 "background : 빨간색 extractstyles "기능"이 관심 인 경우
가 여기 내입니다 "
<?php
public static function extractStyles($element, array &$styles=array()){
if($element instanceof \TEST\HTML){$element = $element->htmlData();}
$tag = isset($element['#acronym']) ? $element['#acronym'] : NULL;
$id = isset($element['#id']) ? '#'.$element['#id'] : NULL;
$classes = isset($element['#class']) ? $element['#class'] : NULL;
if(isset($element['#style']) && ($tag || $id || $class)){
$ref = &$styles;
if($id){if(!isset($ref[$id])){$ref[$id] = array();};$ref = &$ref[$id];}
if($classes){
if(\is_array($classes)){$classes = '.'.implode('.',$classes);}
if(!isset($ref[$classes])){$ref[$classes] = array();};$ref = &$ref[$classes];
}
if($tag){if(!isset($ref[$tag])){$ref[$tag] = array();};$ref = &$ref[$tag];}
foreach($element[self::ATTRIBUTES]['#style'] as $style=>$value){
$ref[$style] = $value;
}
}
if(isset($element[self::CHILDREN]) && count($element[self::CHILDREN])){
foreach($element[self::CHILDREN] as $child){
self::extractStyles($child, $styles);
}
}
return $styles;
}
?>
모든 포인터를 환영보다 더 많은 것 ... 정말 손실입니다. 나는 내가 원하는 것을 할 수 있는지 알지 못한다.
위에서 언급했듯이 성능은 현재 문제가 아닙니다. 작동한다면 최적화 할 수있는 방법을 찾을 것입니다. 또한 xCSS 및 기타 프레임 워크에 대한 링크가 없으므로 문자열에서 작동하고 CSS는 배열로 만들어집니다. 도움을 주시면 미리 감사드립니다.
"중복 값을 어떻게 제거합니까?"예제를 제공 할 수 있습니까? 나는 왜 당신이 같은 객체에 클래스와 스타일을 모두 적용하는지 혼란스러워합니다. –