그누보드4에서 본문의 <link style 을 HEAD 안으로 올리는 방법 알고 싶어요.

그누보드4에서 본문의 <link style 을 HEAD 안으로 올리는 방법 알고 싶어요.

QA

그누보드4에서 본문의 <link style 을 HEAD 안으로 올리는 방법 알고 싶어요.

답변 1

본문

스킨을 만들때 위에 스타일 경로를 지정하죠.
 
그누보드5에서는 이게 되는데 그누보드4에서는 안되더군요.
그래서 그누보드5의 함수와 클래스를 그누보드4에 복사해서 사용하니 안되네요.
 
그 스타일을 HEAD 안으로 옮기는 방법이 작년 12월에 배보된 그누보드5와 최근에 배포되는 그누보드5의 소스가 다르더군요.
 
 
12월에 배포된 그누보드5의 함수를 복사하니 안되더군요.
 
그래서 최근에 배포하는 그누보드5의 CLASS 방식을 복사해서 실행하니 역시 본문에 있는 <link style 이 HEAD로 이동되지 않습니다.
add_stylesheet('stylesheet_url', 0)
html_end();
$html_process = new html_process();
 
그리고 common.lib.php의 html_end와 class 다 똑같은 화일내로 복사해서 불러오니
본문의 스타일 태그가 head로 이동되지 않더군요.
 
 
그누보드4에서 본문에 있는 스타일을 head로 이동시키는 방법을 알고 싶습니다.

이 질문에 댓글 쓰기 :

답변 1

1. /lib/common.lib.php 파일 하단에 아래 함수,클래스 추가

// HTML 마지막 처리
function html_end() {
    global $html_process;
    return $html_process->run();
}

function add_stylesheet($stylesheet, $order=0) {
    global $html_process;

    if(trim($stylesheet))
        $html_process->merge_stylesheet($stylesheet, $order);
}

class html_process {
    protected $css = array();

    function merge_stylesheet($stylesheet, $order)
    {
        $links = $this->css;
        $is_merge = true;

        foreach($links as $link) {
            if($link[1] == $stylesheet) {
                $is_merge = false;
                break;
            }
        }

        if($is_merge)
            $this->css[] = array($order, $stylesheet);
    }

    function run()
    {
//          global $config, $g4, $member;

        $buffer = ob_get_contents();
        ob_end_clean();

        $stylesheet = '';
        $links = $this->css;

        if(!empty($links)) {
            foreach ($links as $key => $row) {
                $order[$key] = $row[0];
                $index[$key] = $key;
                $style[$key] = $row[1];
            }

            array_multisort($order, SORT_ASC, $index, SORT_ASC, $links);

            foreach($links as $link) {
                if(!trim($link[1]))
                    continue;

                $stylesheet .= PHP_EOL.$link[1];
            }
        }

        /*
        </title>
        <link rel="stylesheet" href="default.css">
        밑으로 스킨의 스타일시트가 위치하도록 하게 한다.
        */
        return preg_replace('#(</title>[^<]*<link[^>]+>)#', "$1$stylesheet", $buffer);
    }
}


2. /common.php 파일 하단에 아래 코드 추가

ob_start();
$html_process = new html_process();

3. /tail.sub.php 파일 </html> 아래쪽에 아래 코드 추가
<?php echo html_end(); // HTML 마지막 처리 함수 : 반드시 넣어주시기 바랍니다. ?>

4. 해당 스킨 각 파일(list, write, view) 상단 부분에 아래 코드 추가(css파일 이름은 수정)
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_path.'/board.css">', 0);


common.php 파일에서  ob_start 로 시작
tail.sub.php 에서 html_end() 함수에서
$buffer = ob_get_contents(); //ob_start ~ ob_end 사이의 내용들이니 페이지 전체 소스..
ob_end_clean(); 로 끝나고 아래 정규식으로 처리하네요

return preg_replace('#(</title>[^<]*<link[^>]+>)#', "$1$stylesheet", $buffer);

g4에 직접 넣어가면서 테스트 해봤습니다.
이런 기능(?)이 있는 줄 몰랐는데 덕분에 알았네요~^^

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 15
© SIRSOFT
현재 페이지 제일 처음으로