Spac 템플릿 클래스에 정의된 사용 가능한 템플릿 태그 리스트입니다.
템플릿태그는 뷰에서 html 코드와 함께 사용 가능하며, 꼭 사용할 필요는 없습니다.
사용하고 싶지 않은경우 "PHP"코드를 그대로 사용하면 됩니다.

1. 단순한 변수 출력용으로 태그를 사용할경우에는 "{=변수}"를 사용합니다. 이때 $this->는 생략합니다.

[ex1]
PHP코드
<?PHP echo $this->myName; ?>

템플릿코드
{=myName}

[ex2]
PHP코드
<?PHP echo $this->printView(); ?>

템플릿코드
{=printView()}




2. 긴 php 코드를 삽입할 경우에는 시작시 "<!--[", 종료시 "]-->" 를 사용합니다. ("<?php.....?>" 를 그대로 사용가능)

[ex1]
<!--[
        if($this->aaa == 10) echo "hello";
]-->


3. 위의 긴 php코드를 삽입할경우 코드내의 변수를 간략히 표현할 경우 "{}" 를 사용하며, 이때 "$this->" 는 생략가능합니다. (단, php 코드안에서 "{=변수}" 형태는 사용할 수 없습니다.)

[ex1] 2번의 예제를 간단히 표현하면
<!--[
            if({aaa} == '11') echo "hello";
]-->


4. Object 지시자("->") 는 점(".") 으로 대체하여 사용 가능합니다.

[ex1]
PHP코드
<?php echo $this->ClassName->MethodName() ?>

템플릿코드
{=ClassName.MethodName()}
  :  "{= " 로 시작했으므로 "<?PHP echo" 가 실행되며, "$this->"는 생략되고, 지시자 "->" 는 "." 으로 대체.

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

템플릿태그의 사용  (0) 2010.01.18
Posted by webdata
Spac 매뉴얼/Paging2010. 2. 8. 22:21
Spac 에는 기본적으로 페이징 기능이 플러그인으로 내장되어 있습니다.
여기서 페이징이란 게시판처럼 많은 양의 데이터를 한페이지에 모두 한번에 표현할 수 없기때문에 일정량씩 페이지를 분할하여 화면에 출력해주는 것을 뜻합니다.

일반적으로 사용하는 다른 페이징과 크게 다르지 않으나, Spac 의 GET변수 전달방식에 맞추어 쉽게 사용할 수 있도록 제작되어졌습니다.

Spac 페이징을 사용하기 위해선 Paging 클래스 파일을 삽입하거나, getControllerInstance 메소드를 이용하여 Paging 클래스를 Spac 액션클래스 내부로 가져와 사용합니다.

이해를 돕기 위해 실제 게시판 소스의 일부를 발췌했습니다.

아래는 게시판 글 리스트를 출력하는 "예" 입니다. 파란색으로 표현된 부분이 페이징을 위한 코드이므로 이부분을 확인하시면 됩니다.

* Spac/model/BBS.Class.php
<?php
require_once("/home/myAccount/Spac/controller/Paging/Paging.Class.php");     //페이징클래스 파일 삽입
class BBS extends Controller {

    var $Paging = null;
   
    var $page_url;
    var $first = 0;
    var $pgSize = 2;
    var $blcSize = 5;
    var $page = 1;

    function BBS() {}

    function getBBSList() {
       
        $this->setListVars();
       
        $this->bbs_list_array = array();

        //paging
        $this->Paging        = new Paging;                                 //페이징 Object 생성
       
        if(!$this->page)    $this->page = 1;                               //페이지가 명시되지 않으면 항상 1페이지로 고정
        $this->page_url        = "/bbs/BBS/".$this->category;       //기본적으로 호출할 게시판리스트 URL
        $this->pgSize        = 10;                                           //한페이지에 출력할 게시물 수
        $this->blcSize        = 5;                                            //페이지하단에 한번에 표시할 페이지 링크 수
        $this->first        = $this->pgSize*($this->page-1);           //수정하지 않고 그대로 사용합니다.
       
        $query = " Select SQL_CALC_FOUND_ROWS * From bbs where category='".$this->category."' Order by reg_date DESC Limit $this->first,$this->pgSize";
        $this->Dao->executeQuery($query);
       
        while($Rows = $this->Dao->getFetchArray()) {
            $this->bbs_list_array[] = $Rows;           
        }
       
        $query = "Select FOUND_ROWS()";
        $this->Dao->executeQuery($query);
        $this->total_record = $this->Dao->getResult();                //전체 레코드수를 파악하여 변수에 넣습니다.
       
        $this->Paging->initPaging($this->total_record, $this->blcSize, $this->pgSize, $this->page, $this->page_url);
        $this->Paging->getPaging();

    function viewBBS() {
        //특정게시물 보기 코드..........
    }


}
?>


* Spac/view/bbs_list.html
<div id="body_contents" style="display:none">

<table border="0" width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:5px">   
    <tr>
        <td align="left">
            총 <?= $this->total_record ?> 개의 글이 있습니다.
        </td>
        <td align="right">
            <input type="button" value="글작성하기" onClick="Write('{=category}')"></input>
        </td>
       
    </tr>
</table>


<table border="0" width="100%" cellpadding="0" cellspacing="0">
    <tr align="center">
        <td width="50" class="head_col_bg">번호</td>
        <td width="" class="head_col_bg">제목</td>
        <td width="80" class="head_col_bg">작성자</td>
        <td width="130" class="head_col_bg">작성일</td>
    </tr>
   
   
<?
foreach($this->bbs_list_array as $this->Rows) {

    $this->url = "/bbs/BBS/viewBBS/".$this->category."/".$this->Rows['bbs_no']."/".$this->page;

    $this->Rows["reg_date"]        = substr($this->Rows["reg_date"],0,10);

?>   

    <tr align="center" onMouseOver="this.style.backgroundColor='#FFFFFF'" onMouseOut="this.style.backgroundColor=''">
        <td class="body_col_bg">{=Rows["bbs_no"]}</td>
        <td class="body_col_bg" width="" align="left"><a href="{=url}">{=Rows['subjects']}</a></td>
        <td class="body_col_bg">{=Rows["user_name"]}</td>
        <td class="body_col_bg">{=Rows["reg_date"]}</td>
    </tr>


<?
}
?>   
   
</table>   
   
   
<table border="0" width="100%" cellpadding="5" cellspacing="0">   
    <tr>
        <td align="center">
             <?=$this->Paging->pageString?>
        </td>
    </tr>
</table>

</div>


*  BBS 클래스의  $this->Paging->getPaging(); 을 호출하게되면 "$this->Paging->pageString" 변수에 출력할 페이지 이동 링크가 저장되므로 위의 뷰에서처럼 그대로 출력해주면 됩니다.

Posted by webdata
Spac 매뉴얼/로깅2010. 2. 8. 21:58

Spac을 이용해 웹사이트를 개발하게되면 Spac 컨트롤러가 URL을 해석해서 적절한 모델클래스를 호출하고 실행하게되는데 이 일련의 과정을 로그로 기록할 수 있습니다.

로그를 기록하기 위해선 Spac 컨트롤러 설정을 해야 합니다.
아래는 로그관련 설정부분입니다.

* Spac/controller/Controller.ini
[loging]
spacFileLoging    = true
spacLogFilePath    = "/home/계정/Spac/logs/spac"
errReport    = true    
errPrintView   = false 
errFileLoging   = true 
errLogFilePath   = "/home/계정/Spac/logs/error"
errPage     = "/error.html"
viewDispatcherSource = false

1. spacFileLoging  : true 로 설정하게 되면 로그 기록이 작동됩니다. 이후부터  Spac 접속로그가 모두 파일로 기록됩니다.
2. spacLogFilePath : 로그 파일이 저장되는 경로입니다.
3. errReport  : 에러발생시 에러내용을 출력할 것인지 여부입니다.
4. errPrintView : 위 3번에서 에러내용을 출력할 경우에 화면으로 보여줄것인지 설정합니다.
5 errFileLoging  : 위의 에러 내용을 파일로 저장합니다.
6. errLogFilePath : 파일로 저장할 경우 저장될 경로를 지정합니다.
7. errPage : 에러를 화면에 출력하지 않을경우 이동할 에러페이지를 지정합니다. (View 경로를 기준으로합니다.)
8. viewDispatcherSource : 화면에 출력할 내용을 소스그대로 출력합니다.(에러와 무관)

* 위의 설정 중 로그파일들이 저장될 경로는 익명으로 파일을 쓰기 가능하도록 퍼미션을 설정합니다.(ex. 707)

* 로그파일은 날짜별로 하루에 1개씩 생성되며, 하루의 로그들은 하나의 파일에 누적되어 저장됩니다.


아래는 Spac 로그의 예입니다.

* Spac/logs/spac/20091205.access.log
### ------------SPAC Access Log-----------###-------------2009-12-05 01:49:23
1. REMOTE_ADDR             : ::1
2. REQUEST_URI             : /User/viewUserRegForm
3. PATH_INFO             : /User/viewUserRegForm
4. QUERY_STRING         :
5. Used urlPathInfo     : /User/viewUserRegForm
6. actionClassName         :
7. actionMethodName     :
8. args                 : Array
(
)

### ------------SPAC Access Log-----------###-------------2009-12-05 01:49:28
1. REMOTE_ADDR접            : ::1
2. REQUEST_URI             : /User/User/viewUserRegForm
3. PATH_INFO             : /User/User/viewUserRegForm
4. QUERY_STRING         :
5. Used urlPathInfo     : /User/User/viewUserRegForm
6. actionClassName         : User
7. actionMethodName     : viewUserRegForm
8. args                 : Array
(
)


각각의 접속 시각이 기록되고 해당 접속의 URL 호출값 및 실행된 액션클래스값을 보여줍니다.

1. REMOTE_ADDR : 접속자의 ip 정보를 보여줍니다. (위의 예제에선 로컬서버에 접속한 이유로 기록되지 않았습니다.)
2. REQUEST_URI : 접속자가 브라우져에 요청한 URL 값입니다.
3. PATH_INFO : 접속자가 브라우져에 요청한 URL 값중 index.php 이하의 path 값을 보여줍니다.
4. QUERY_STRING : 접속자가 브라우져에 요청한 Query String 값을 보여줍니다.(index.html?/Class/Method 방식으로 호출)
5. Used urlPathInfo : 접속자가 호출한 URL 을 분석하여 실제 Spac에서 사용할 Url로 변환된 값입니다.
6. actionClassName : URL을 분석하여 실행된 액션클래스명
7. actionMethodName : URL을 분석하여 실행된 액션클래스내의 메소드명
8. args : 전달된 변수값들을 배열로 보여줍니다.





다음은 에러로그값입니다.

* Spac/logs/spac/20091205.error.log
### ------------SPAC Error Log-----------###-------------2009-12-05 01:49:23
1. REMOTE_ADDR             : ::1
2. REQUEST_URI             : /9User/viewUserRegForm
3. PATH_INFO             : /9User/viewUserRegForm
4. QUERY_STRING         :
5. Used urlPathInfo     : /9User/viewUserRegForm
6. actionClassName         :
7. actionMethodName     :
8. args                 : Array
(
)

9. error Message--------------------------

[클래스명 에러]
에러명 : Class Name Error
에러내용 : 클래스명으로 "9User" 을 사용할 수 없습니다
안내 : 클래스명은 영문대문자로 시작해야하며, 2글자이상이어야 하고, 두번째 글자부턴 영문 대/소문자, 숫자, 언더바(_) 만 사용가능합니다.


위의 로그값은 에러 발생시 생성되는 로그값입니다.
1~8 번까지는 이전의 access 로그의 값과 같습니다..
9. error Message : 에러내용을 출력해줍니다.




Spac 로그 및 에러로그는 접속시마다 많은양의 로그가 누적되어 기록됩니다.
따라서 실제 서비스 운영시 로그파일의 적절한 관리가 필요합니다. (예. 주기적으로 백업후 삭제)
Posted by webdata
Spac 에서는 뷰를 이용해 화면을 출력할 때 사용자에게 보여지는 URL링크를 암호화 해서 출력 할 수 있습니다.
이렇게 암호화 된 URL을 통해 접근하면 Spac에서 자동으로 복호화 하여 원주소로 복원하여 접속할 수 있도록 도와줍니다.

예)

"/MyClass/MyMethod/param1/param2" 를 암호화 하여 처리하면
"/dkfhhlSDFsfskfldSDFdjkfasjfdkd" 형태로 만들어 링크를 걸어놓을 수 있습니다.

이후 웹페이지에서 암호화된 "/dkfhhlSDFsfskfldSDFdjkfasjfdkd" 로 접근하면 Spac 프레임웍이 암호화된 URL로 자동 판단하여
"/MyClass/MyMethod/param1/param2" 의 처리결과를 출력합니다.

URL 암호화 기능을 사용하면 외부에 자신의 웹페이지 링크를 제공할때 URL의 자세한 위치를 숨기거나, 암호화 키값 변경으로 이전에 알려진 URL을 사용할 수 없게 처리할 수도 있습니다.



Spac URL 암호화기능을 사용하려면 아래의 과정을 거칩니다.

1. Spac/controller/Controller.ini 설정
[Crypt URL]
useCryptUrl                = true

Controller.ini 파일내용 중 위의 내용이 있는 부분을 찾아 값을 "true" 로 설정합니다.

2. Spac/controller/Crypt.ini 설정
;Crypt Url Configuration
flag                = "a"                        ; 암호화URL 키값
className             = "Crypt"                            ; 암호화 클래스명
classPath            = "../Spac/controller/Crypt/Crypt.Class.php"    ; 암호화클래스 경로
encryptMethodName     = "encrypt"                            ; 암호화 메소드명
decryptMethodName    = "decrypt"                         ; 복호화 메소드명

   (1) 두번째 줄의 "flag" 에 지정된 값을 자신이 원하는 값으로 변경합니다.
   (2) 네번째 줄의  "classPath" 의 경로값을 "Spac" 경로가 맞는지 확인 한 후 맞지 않는경우 제대로 수정합니다.
   (3) 위의 두가지 설정값을 제외한 나머지 줄은 암호화 클래스를 수정하지 않는 한 기본값을 그대로 사용합니다.
       (사용자가 직접 암호화 클래스를 작성하거나 수정할 경우 직접 작성한 클래스 및 암호화/복호화 메소드를 지정합니다.)
         => 테스트가 끝나면 위의 암호화 클래스인 Crypt.Class.php 파일을 반드시 수정하신후 사용하시길 권장합니다.
             기본 암호화 클래스는 예제를 위해 단순하게 암호화 하는 코드가 들어있습니다.


3. view 파일에 링크 생성시 암호화 메소드를 사용하여 링크를 생성합니다.
sample.html
/MyClass/MyMethod/param1/param2
<?=$this->encryptUrl("/MyClass/MyMethod/param1/param2")?>

위의 예제에서 첫번째줄은 암호화를 하지 않았고, 두번째 줄은 암호화를 했습니다.

위 예제의 출력결과는 아래와 같습니다.
/MyClass/MyMethod/param1/param2
/a%3D%3DwLNl3QsF2cz9ST51UZ0h2bk9CchJXYtFzLwFmch1mMa



암호화된 URL을 통해 접근할 경우 Spac 이 자동으로 복호화해서 처리합니다.


실제 적용되는것을 확인하시려면 http://www.phpwork.kr/View/Login 로 이동하신 후 아이디/비밀번호 찾기 링크를 클릭해보시면 암호화된 URL로 이동하는것을 확인하실 수 있습니다.


Posted by webdata
웹 페이지를 만들 때는 보통 하나의 파일로 하나의 페이지를 구성하기보다는, 페이지의 각 부분 ( 메인메뉴,서브메뉴,바디,하단카피라이트 등)을 각각 파일로 만들어 하나의 파일에 삽입하여 구성하는 방법을 많이 사용합니다.

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



위의 그림에서는 각 부분의 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
Spac은 URL 을 분석하여 실행할 액션클래스를 찾아 실행하는데, 이때 호출되는 URL에 실행되는 액션클래스명이 노출되게 됩니다.

여러가지 이유로 노출되는 클래스명을 감추고 싶은경우 클래스매핑을 통해 호출되는 클래스와 실제 실행되는 클래스를 다르게 지정할 수 있습니다.

클래스매핑은 ActionClassMapping.ini 파일에의해 작동되므로 이 파일을 수정하여 사용합니다.

먼저 "ActionClassMapping.ini" 파일의 내용을 보면 아래와 같습니다.
;ActionClass Mapping
[Class]
Welcome = HelloSpac

세번째 줄 부터 실제 사용할 클래스명을 설정합니다.
세번째 줄의 변수명인 "Welcome"은 URL로 이 "Welcome" 이 호출되면 값인 "HelloSpac" 이 실행되게 합니다.
즉, http://www.mydomain.com/Welcome 이 호출되면 실제는 http://www.mydomain.com/HelloSpac 이 실행됩니다.



그렇다면 http://www.mydomain.com/HelloSpac 을 직접 호출되면 어떻게 될까요?
"HelloSpac" 의 실행결과 값이 그대로 출력됩니다.

위의 예처럼 실제 실행되는 클래스는 "HelloSpac" 이지만 웹에서 호출할땐 "Welcome" 을 사용하고
"HelloSpac" 이 호출되면 거부 응답을 하고 싶다면???

먼저 "HelloSpac" 이 호출될 경우 응답할 액션클래스를 생성합니다.
아래처럼 만들어 봅니다.

거부응답을 보여줄 클래스명을 "Deny.Class.php" 로 해봅시다.

* Spac/model/Deny.Class.php
<?php
class Deny extends Controller {
   
    function Deny() {}

    function execute() {
        echo "Access Denied";
    }

}
?>

거부 응답을 보여줄 "Deny" 클래스를 만들었습니다.

이제  "ActionClassMapping.ini" 에 거부응답 클래스를 등록해 줍니다.
;ActionClass Mapping
[Class]
Welcome = HelloSpac
HelloSpac = Deny


위처럼 설정하게 되면
1. http://www.mydomain.com/Welcome 이 호출되면 "HelloSpac" 클래스가 정상적으로 실행됩니다.
2. http://www.mydomain.com/HelloSpac 이 호출되면 "Deny" 클래스가 호출됩니다.

결론적으로 "HelloSpac" 를 실행하기 위해선 "Welcome" 을 호출해야만 하고 직접 "HelloSpac"을 호출하게되면 거부응답인 "Deny"를 보여줍니다.

직접 접근을 막고 싶은 클래스는 위와 같이 Deny 클래스를 매핑하여 외부에 해당 클래스의 노출을 막을 수 있습니다.



* 클래스매핑에 설정하는 접근클래스명은 Spac 클래스명명규칙을 따르지 않습니다.
  :  Spac 에서 액션클래스명은 알파벳이나 숫자로 이루어져야 하며 첫글짜는 반드시 알파벳대문자로 시작해야 하는 규칙이 
     있지만, 클래스 매핑을 통해 접속을 하도록 하는경우에는 이 규칙을 따르지 않아도됩니다.
     따라서 클래스매핑을 통해 URL 을 복잡하게 구성할 수도 있습니다.


     ActionClassMapping.ini
;ActionClass Mapping
[Class]
d90f7f896g5jh7467fg58df7g89df6g8df7g5h6DFA3jjd7sg____ = HelloSpac
     위 예제처럼 클래스명을 "d90f7f896g5jh7467fg58df7g89df6g8df7g5h6DFA3jjd7sg____" 와 같이 임의의 문자를 복잡하게
     구성해도 Spac에서 클래스매핑에 따라 "HelloSpac" 의 처리를 문제없이 수행합니다.
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
Spac에서 모델은 사용자가 작성할 비즈니스로직을 뜻합니다.
Class 로 작성된 모델은  URL 을 통해 일정한 규칙대로 호출하게 되며, Spac 컨트롤러는 URL을 분석하여 해당 모델이 실행되도록 합니다.

::: 모델 클래스 작성 및 실행 방법 :::
1. 모델은 클래스(Class)로 작성해야 합니다.

2. 모델클래스는 model 영역에 작성해야 하며, Spac은 URL을 분석하여 model 영역의 사용자 모델클래스를 실행합니다.

3. 모델명명규칙은 아래와 같습니다.
    - 모델클래스 파일명은 "모델명.Class.php" 의 형태를 가져야 합니다.
    - 모델명은 알파벳 대/소 문자, 숫자, 언더바(_)만 사용가능합니다.
    - 모델명은 2글자 이상이어야 합니다.
    - 모델명의 첫글자는 반드시 대문자이어야 합니다.

4. 모델 클래스 작성시 Spac 컨트롤러의 메소드를 상속받아 사용하려면 반드시 Controller 를 상속받아야 합니다.

5. 작성된 모델 호출시에는 아래와 같은 URL 규칙으로 호출합니다.
    - http://www.mydomain.com/모델명/메소드명/전달변수1/전달변수2/전달변수3............

6. URL을 통해 모델 호출 시 메소드명은 생략 가능하며 생략할 경우 기본메소드인 "execute" 가 실행됩니다.

7. "model" 디렉토리 내에 하위 디렉토리를 만들고 그 안에 모델클래스를 작성하는 경우 호출 URL 의 모델명에 해당 하위디렉토리를 명시합니다.
    - http://www.mydomain.com/모델하위디렉토리명/모델명/메소드명/전달변수1/전달변수2/전달변수3............

Posted by webdata



Spac은 요청 URL을 분석하여 개발자가 작성한 모델 어플리케이션을 호출/실행 해 주고, 실행 결과값을 뷰를 통해 출력하는 역할을 합니다.

그림에서 보는바와 같이 사용자의 요청을 Spac 컨트롤러가 분석하여 수행해야 하는 모델클래스를 연결해주고, 모델에서 수행된 결과값을 받아 뷰로 출력하는 순환구조를 가지고 있습니다.

모델클래스를 작성하는데 필요한 확장컨트롤러(Dao, Paging 등)는 별도의 컨트롤러 형태로 제공되며, 사용자가 직접 개발한 클래스 또한 확장컨트롤러로 등록하여 사용할 수 있습니다.
Posted by webdata




Spac은 모델 및 사용자컨트롤러, 뷰 를 통합관리하는 PHP 개발 프레임웍입니다.
모든 파일들은 Spac 내에 위치하게되며 뷰를 제외한 모델 및 사용자컨트롤러는 PHP Class로 작성되어 집니다.

Posted by webdata