'Dispatcher'에 해당되는 글 3건

  1. 2010.01.25 Spac 뷰 레이아웃 :: Spac View Layout
  2. 2010.01.18 템플릿태그의 사용
  3. 2010.01.01 dispatcher
웹 페이지를 만들 때는 보통 하나의 파일로 하나의 페이지를 구성하기보다는, 페이지의 각 부분 ( 메인메뉴,서브메뉴,바디,하단카피라이트 등)을 각각 파일로 만들어 하나의 파일에 삽입하여 구성하는 방법을 많이 사용합니다.

예를 들면 아래와 같습니다.



위의 그림에서는 각 부분의 html 파일들이 모여 "layout.html" 파일을 이루고 있습니다.

layout.html 파일에 각 html 파일들을 직접 삽입하여 페이지를 구성할 수도 있으나, Spac 프레임웍은 위와 같은 레이아웃 구성을 쉽게 할 수 있도록 레이아웃 도구를 제공합니다.

이제 Spac 의 레이아웃 도구를 이용하여 위와 같은 레이아웃을 구성해 보도록 하겠습니다.


먼저 레이아웃을 구성할 설정파일을 열어 아래와 같이 입력합니다. (만약 설정파일이 존재하지 않는다면 만들어줍니다)
레이아웃 설정파일은 "Spac/controller/Layout.ini" 파일입니다.


* Spac/controller/Layout.ini
;layout files config
[main]
layout   = "/layout.html"
menu   = "/menu.html"
left  = "/left.html"
body  = "/body.html"
foot  = "/foot.html"

- 첫번째줄(녹색글씨) 는 주석문이므로 무시됩니다.

- 두번째줄은 레이아웃의 대표 이름입니다.
  이 설정파일에는 여러개의 레이아웃을 구성할 수 있으므로 각 레이아웃마다 구별할 수 있는 이름을 지정해줍니다.
  이번 예제에서는 "main" 으로 하겠습니다.

- 세번째줄은 전체레이아웃의 부모가 되는 파일을 지정합니다.
  이 부모파일은 반드시 레이아웃파일 구성중 가장 먼저 와야 합니다.

- 네번째부터는 부모 레이아웃의 각 부분에 들어갈 조각파일들을 지정합니다.
  레이아웃파일의 지정은 이름 = "값" 의 형식을 가집니다.


레이아웃 설정이 끝나면 그 내용대로 각각의 파일들을 만들어줍니다.
설정파일의 순서대로 파일들을 만들어보겠습니다.

* Spac/view/layout.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Spac Layout Page...</title>
</head>
<body>

<table border="1">
    <tr>
        <td width="800" colspan="2" height="70">#menu#</td>
    </tr>
    <tr>
       <td width="150" height="500">#left#</td>
       <td width="650">#body#</td>
    </tr>
    <tr height="50">
        <td width="800" colspan="2">#foot#</td>
    </tr>
</table>

</body>
</html>

레이아웃에 들어가는 내용은 전체적인 레이아웃 배치와 각 부분에 들어갈 html 파일로 구성됩니다.
html 로 삽입해야 하는 부분에는 "Layout.ini" 에 지정한 html 파일의 이름을 지정해주고 앞뒤로 "#" 을 이용해 닫습니다.(파랑색 글씨)


이제 각 html 파일의 내용을 만들어 보겠습니다.

* Spac/view/menu.html
이곳은 메뉴 영역입니다.


* Spac/view/left.html
이곳은 왼쪽 서브 메뉴 영역입니다.


* Spac/view/body.html
이곳은 바디 부분입니다.
<br/>
<?=$this->msg?>
<br/>
이곳이 주요 내용을 출력할 부분입니다.


* Spac/view/foot.html
이곳은 하단 카피라이트 부분입니다.




레이아웃을 위한 설정과 파일을 모두 만들었습니다.
이제 모델클래스를 만들어 지금까지 만든 레이아웃페이지를 출력해보겠습니다.

* Spac/model/LayoutTest.Class.php
<?php
class LayoutTest extends Controller {

    var $msg = '안녕하세요';

    function LayoutTest() {}

    function execute() {
        $this->setLayout("main");
        $this->result_uri = "body.html";
        $this->targetLayoutName  = "body";
        $this->dispatcher();
    }
}
?>

1. "setLayout" 메소드를 이용하여 "Layout.ini" 에 정의된 레이아웃 중 "main" 이라는 이름의 레이아웃을 적용합니다.
2. "result_uri" 에 주요한 출력파일을 설정합니다. (여기서는 body.html 가 주요한 내용이 있는 파일입니다.)
3. "targetLayoutName" 에는 위 2번 항목이 위치할 레이아웃내의 이름영역을 지정해줍니다. (기본값 "body")
4. "dispatcher" 메소드를 이용해 위 레이아웃을 화면에 배치/출력합니다.


브라우저에서 호출해봅니다.


실제 적용된 예제는 아래 링크에서 확인하실 수 있습니다.
Posted by webdata
템플릿태그는 사용자 화면인 View 파일을 구성할때 html 및 php 코드를 사용해서 작성하게 되는데 이때 php코드들을 간단한 태그를 사용하여 간편하게 작성할 수 있도록 해줍니다.

이때 사용하는 태그는 기본적으로 Spac에 정의되어 있지만 사용자가 임의대로 작성하여 사용할 수도 있습니다.
템플릿태그는 View 에서만 사용할 수 있습니다.

템플릿태그를 사용하기 위해선 Spac 컨트롤러 환경설정파일내의 템플릿태그 사용을 활성화 해야 합니다. 


* 템플릿태그 사용 활성화
    : Controller.ini 파일의 "useTemplateTag" 부분을 활성화
[viewTemplate]
useTemplateTag    = true


* 템플릿사용 예제 (클래스 및 뷰)
----- Test.Class.php----------
<?
class Test extends Controller {
    var $msg;
    function Test() {
        $this->msg = '안녕하세요';
    }
    function execute() {
        $this->result_uri = 'test.html';
        $this->dispatcher();
    }
}
?>


---------- test.html -----------
<html>
<head>
<title>test</title>
</head>
<body>
{=msg}
</body>
</html>

위 test.html 내에서 "Test.Class.php" 의 맴버변수 "msg" 내용을 출력하기 위해서 {=msg} 를 사용했습니다.
이것은 템플릿 태그를 사용한 것이며 php코드 "<? echo $this->msg; ?>" 와 같은 결과입니다.

Spac 에서는 "Spac/ViewTemplate/ViewTemplate.Class.php"를 통해 템플릿태그의 치환을 수행합니다.
PHP코드로 치환된 코드들은 Spac컨트롤러에 의해 캐시로 저장되어 다음번 같은 내용을 호출시 템플릿치환과정을 생략하고 곧바로 저장된 캐시파일을 로드하여 실행하므로 매번 치환하지 않아 서버의 부담을 줄여줍니다. (Spac 컨트롤러 설정에서 "useViewCache" 기능 활성화)

"Spac/ViewTemplate/ViewTemplate.Class.php" 파일을 수정하여 자신만의 템플릿 문법을 정의하여 사용할 수도 있습니다.

'Spac 매뉴얼 > 템플릿태그의사용' 카테고리의 다른 글

Spac 기본 템플릿 태그  (0) 2010.02.16
Posted by webdata
dispatcher 메소드는 사용자의 모델클래스 내에서 호출하며, 호출 즉시 모델클래스내에서 지정된 뷰 파일을 출력하는 역할을 합니다.

dispather 에 의해 페이지가 출력될경우 브라우저의 주소가 변경되지 않고 원하는 뷰의 내용을 출력할 수 있습니다.

사용법은 아래와 같이 뷰파일을 지정한 후 dispather 를 호출합니다.

dispacher 의 예제
class BBS extends Controller() {

    function BBS() {   }

    function goWriteForm() {
         $this->result_uri = 'write.html';
         $this->dispatcher();
    }

    function execute() {
        $this->goWriteForm();
    }

}


위의 내용 중 뷰를 지정하는 result_uri 값은 Spac 의 뷰 디렉토리를 기준으로 경로를 입력합니다.
$this->result_uri = 'write.html';            <== 이경우 "Spac/view/write.html" 의 경로에 파일이 있는경우


Posted by webdata