테마


테마는 사이트의 정체성을 표현할 수 있는 디자인적 요소 입니다. 각각의 모든 사이트 들은 자신들만의 정체성을 가지는 디자인 스타일을 가지고 있습니다.

지니PHP는 사이트의 정체성을 관리할 수 있는 테마기능을 지원합니다. 테마는 다른말로 스킨이라는 용어도 같이 사용을 하였습니다.

디자인의 분리


기존적인 뷰의 리소스는 디자인과 분리되어 있습니다. 실제적인 동작의 결과만을 출력하고, 보기 좋은 화면으로 보이기 위해서 디자인을 결합하게 됩니다. 디자인은 보통 사이트 전체에 공통적으로 적용이 됩니다.

이렇게 분리된 디자인을 괸리하는 것을 테마라고 합니다.

결합


테마는 분리된 디자인을 가지고 있습니다. 테마는 크게 레이아웃상단/하단으로 구성되어 있습니다.

레이아웃은 다시 상단과 하단으로 분리되어 있습니다. 레이아웃은 컨덴츠를 결합하고, 공통된 상단과 하단을 삽입하여 화면을 출력하게 됩니다.

지니PHP는 하향식 계층구조 보다 상향식 계층구조를 가지고 있습니다. 하향식 구조는 먼저 레이아웃을 처리하고 상단, 하단 처리 그리고 내용을 처리함니다. 반면에 지니PHP에서 채택한 상향식은 먼저 처리될 페이지를 우선적으로 처리합니다.

이는 경우에 따라서 테마를 사용하지 않은 경우도 있기 때문입니다. 이러한 방식은 해더. 퍼터. 레이아웃을 쓰지 않는 유형의 페이지를 처리하는데 더 빠른 속도를 얻을 수 있습니다.

템플릿 사용


테마의 파일에서도 템플릿 문법을 적용할 수 있습니다.

해더파일의 경우 메뉴의 데이터를 출력하기 위해서 Liquid템플릿 언어를 사용합니다.

테마 적용


테마를 적용하는 것은 매우 간단합니다. 사이트의 환경설정 파일에서 테마명만 지정하면 됩니다.

theme = "jiny/page"

이렇게 테마명을 지정하면 사이트 출력되는 모든 페이지에 디자인을 입혀서 브라우저로 전송을 하게 됩니다.

테마제외


만일 사이트 설정에서 theme를 지정하지 않으면 됩니다. 테마의 이름이 없으면 는 테마의 구동 처리를 하지 않습니다.

테마처리


지니 view 패키지의 viewShow.php는 다음과 같이 테마 설정값에 대해서 처리를 구분합니다.

// 테마처리
if($theme = conf("site.theme")) {
    if (Registry::get("Packages")->isPackage("jiny/theme")) {

        // 테마 의존성 주입(view)
        // 뷰 객체가 생성되기 이전이기 때문에, 테마에 $this로 주입을 합니다.
        $this->Theme = Registry::create(\Jiny\Theme\Theme::class, "Theme", $this);

        if ($this->Theme->isTheme()) {
            $this->Theme->render($viewHtml);        
        }
    }
} else {
    // echo "테마가 지정되지 않았습니다.";
}

만일 사이트에 테마를 적용하지 않기를 원하신다면 설정을 주석처리 하시면 됩니다.

커스텀 테마


공통적인 테마의 설정은 site.ini에서 합니다.

가끔은 공통된 테마 이외에 특정페이지만 다른 테마를 설정하고자 하는 경우도 발생합니다. 이런 경우에는 커스템 테마를 설정할 수 있습니다. 이런경우 뷰 파일의 머리말 설정에서 커스텀 테마를 설정합니다.

theme: jiny/admin

커스텀 테마가 설정되어 있는 경우 사용자 지정 테마로 우선 동작을 하게 됩니다. 이 기능은 사이트에서 front / back 부분을 분리하여 사이트를 이중적으로 만들때 매우 유용합니다.

커스텀 테마를 적용하기 위해서는 먼저 기본 테마가 설정되어 있어야 합니다. 기본테마가 활성화 되어 있지 않으면, 테마의 처리 루틴으로 진입을 하지 않습니다.

테마 폴더


테마는 /theme폴더안에 저장관리 됩니다. 이 폴더의 경로는 .env.php에서 설정되어 있습니다.