개발-PHP

[함수] PHP 레이아웃을 깔쌈하게 꾸미기

WEBKIKIS 2016. 3. 30. 20:46
반응형

[함수] PHP 레이아웃을 깔쌈하게 꾸미기



요즘 백수라 그런지 부업으로 하릴없이 PHP를 하고 있습니다.
저는 .NET과 Java 등의 레이아웃 시스템에 익숙해서 그런지
ASP나 JSP의 전통적인 include 와 PHP의 전통적인 include 방식을 끔찍히 싫어하죠.
왜냐면 레더 푸터로 부분부분 나누다 보니 HTML 결과물에 대한 유효성 검사와 유지보수의 어려움입니다.
다행히도 PHP에서도 라라벨이나 Smarty 등의 템플릿 프레임워크가 그런 끔찍한 템플릿을 고쳐줍니다.

하지만 위와 같은 프레임워크를 쓰지 못하는 상황에 직면해 있다면 어떻게 해야 할까요?
그래서 저는 구글링 해보며, 레이아웃을 간단하게 만드는 프레임워크를 개발하기까지 했습니다.
그 결과물은 차후 Github 에 올리도록 하겠습니다.
이번에 소개할 팁은 별도 프레임워크가 필요없이 깔끔하고 유지보수하기 편한 레이아웃 작성입니다.

참고 소스를 보시면 3개의 파일이 있습니다.
맨 위에 하나의 공통 템플릿 라이브러리만 만드시고
그다음 레이아웃 파일은 필요하면 1개 이상 만들 수 있고
나머지 페이지 처리는 맨 아래 hello.php 에서 처리합니다.
일종의 트릭이지만, 2번째 파일처럼 풀 레이아웃을 구성할 수 있고
유지보수가 용이하다는 장점에서 매력적입니다.
물론 매 페이지마다 hello.php 의 상단 처리를 해야 한다는 점이 껄끄러운 점일 지도 모르죠.



<?php
//# lib/PageTemplate.php
//레이아웃에 필요한 공통 클래스
class PageTemplate {
    public $PageTitle;
    public $ContentHead;
    public $ContentBody;
}
?>
 
<?php
//# layout.php
//여러군데에서 쓸 공통 레이아웃입니다.
require_once('lib/PageTemplate.php');
?>
<!DOCTYPE HTML>
<html>
<head>
    <title><?php if(isset($TPL->PageTitle)) { echo $TPL->PageTitle; } ?></title>
    <?php if(isset($TPL->ContentHead)) { include $TPL->ContentHead; } ?>
</head>
<body>
    <div id="content">
        <?php if(isset($TPL->ContentBody)) { include $TPL->ContentBody; } ?>
    </div>
</body>
</html>
 
<?php
//# Hello.php
//레이아웃을 적용할 각 불러올 페이지입니다.
require_once('lib/PageTemplate.php');
// $TPL 변수를 사용하여 정의하지 않으면 정의하고 레이아웃 첨부해 스크립트를 끝냅니다.
if (!isset($TPL)) {
    $TPL = new PageTemplate();
    $TPL->PageTitle = "My Title";
    $TPL->ContentBody = __FILE__;
    include "layout.php";
    exit;
}
// 그리고 레이아웃 안 원하는 곳에 다시 이 페이지를 인클루드 하면 원하던 곳에 아래 부분이 동작합니다.
?>
<p><?php echo "Hello!"; ?></p>

출처 phpschool

반응형