'Spac 프레임웍'에 해당되는 글 4건

  1. 2011.07.06 php 프레임워크 Spac 11.7.1 다운로드
  2. 2010.01.25 Spac 뷰 레이아웃 :: Spac View Layout
  3. 2009.12.01 2. 회원리스트 조회
  4. 2009.11.13 "Hello World" 를 출력해보자 2
Spac Download2011. 7. 6. 16:37

Spac 11.7.1


php 프레임워크 Spac  11.7.1을 공개합니다.

Spac 은 Simple Php Action Class 의 약자로서 PHP웹프로그램 개발시 사용하는 클래스기반의 PHP프레임워크입니다.

설치 및 환경설정은 http://www.phpwork.kr/Manual/viewContents/2 를 참고하시면 됩니다.

케릭터셋은 UTF-8 입니다.


이전버전 사용자는 controller 디렉토리내의 'ActionClass.Class.php' 파일과 'Controller.Class.php' 파일을 기존 파일이 덮어 쓰면 업데이트 됩니다.


업데이트 내역은 다음과 같습니다.

  1. INI 파일 완벽 분리 지원
  2. 뷰 캐시 자동업데이트 오류 수정 
License1. 개인/기업/영리/비영리 관계없이 웹개발에 무료로 사용할 수 있습니다.
2. 프레임워크 내의 소스를 사용자 환경에 맞게 수정해 사용할 수는 있으나, 이렇게 수정된 Spac 소스나, 수정된 Spac 소스가 포함된 프로그램, 또는 Spac 소스중의 일부분을 타인에게 배포하거나 판매할 수 없습니다.
3. 소스내의 주석문은 어떠한 경우라도 수정/삭제할 수 없습니다. (Spac에 의해 자동생성된 파일내의 내용 포함)
4. 원작자가 배포한 상태 그대로(수정되지 않은)인 경우에 한해 자유롭게 재배포할 수 있습니다.
5. 이 프로그램의 사용으로 인해 발생하는 어떠한 문제도 제작자는 책임지지 않습니다.
..


.

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
기본예제/회원관리2009. 12. 1. 21:32
이전 예제에서 가입된 회원들의 리스트를 조회하는 예제를 해보겠습니다.

회원에 관련된 내용은 모두 User 클래스에서 실행합니다.
이전에 작성된 User 클래스에 몇가지 메소드를 추가해 보겠습니다.

* Spac/model/User.Class.php
<?php
require_once("/home/sue/www/Spac/controller/Dao/Dao.Class.php"); // getControllerInstance("Dao") 사용할경우 생략가능
class User extends Controller {

    var $user_id;
    var $user_pw;
    var $user_name;

    var $data_list = array();

    function User () {
        $this->Dao = new Dao;             //$this->getControllerInstance("Dao"); 로 대체 가능.
        $this->Dao->transaction = true;
        $this->Dao->connect();
    }

    function viewUserRegForm() {
        $this->result_uri    = "user_reg.html";
        $this->dispatcher();
    }

    // POST 로 전송된 값을 맴버변수로 세팅합니다.
    function setPostVars() {          //예제를 위해 POST 값을 직접 맴버변수에 등록했음.
        $this->user_id       = $_POST['user_id'];
        $this->user_pw      = $_POST['user_pw'];
        $this->user_name  = $_POST['user_name'];
    }

    //위에서 저장된 맴버변수 값을 DB에 Insert 합니다.
    function regUser() {
       
        $this->setPostVars();
       
        $query = " Insert Into user_info(user_id,user_pw,user_name,reg_date) values(?,password(?),?,NOW()) ";
        $this->Dao->prepareStatement($query);
       
        $param = array($this->user_id,$this->user_pw,$this->user_name);
        $this->Dao->setParam($param);
       
        $this->Dao->executeStatement();
       
        echo "회원가입에 성공했습니다.";

        $this->Dao->closeStatement();

    }

    function getUserList() {
      
        $this->data_list = array();

        $query = " Select * From user_info ";
        $this->Dao->executeQuery($query);

        while($rows = $this->Dao->getFetchArray()) {
            $this->data_list[] = $rows;
        }

        $this->result_uri    = "list.html";
        $this->dispatcher();       

    }
}
?>

회원리스트를 모두 배열로 가져오는 메소드  getUserList 를 추가했습니다.
회원 리스트는 "list.html" 로 출력합니다.

이제 list.html 파일을 뷰에 생성합니다.

* Spac/view/list.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>회원리스트</title>
</head>
<body>

회원수는 <?=count($this->data_list)?> 명 입니다.
<br/><br/>

<table border="1">

    <tr bgcolor="#f2f2f2">
        <td width="100">아이디</td>
        <td width="120">이름</td>
        <td width="150">등록일</td>
    </tr>
 
<?php
foreach($this->data_list as $Rows) {
?>

    <tr>
        <td width="100"><?=$Rows['user_id']?></td>
        <td width="120"><?=$Rows['user_name']?></td>
        <td width="150"><?=$Rows['reg_date']?></td>
    </tr>

<?php
}
?>

</table>

<!-- 회원가입버튼을 만들어주고 클릭하면 이전에 만든 가입폼으로 이동시킵니다. -->
<input type="button" value="회원가입" onClick="document.location.href='/User/viewUserRegForm'"></input>

</body>
</html>



이제 브라우저로 출력해 보겠습니다.
아래와 같이 호출합니다.
http://localhost/User/getUserList



회원 리스트가 잘 출력되는지, 회원가입버튼을 클릭하면 이전 예제에서 만든 가입품으로 이동하는지 확인합니다.

이제  회원 가입을 하면 가입처리된 후에 위 리스트 화면으로 이동하도록 수정해 보겠습니다.

User 클래스의 "regUser" 메소드의 마지막 부분만 수정해주면 되겠습니다.

* Spac/model/User.Class.php
<?php
require_once("/home/sue/www/Spac/controller/Dao/Dao.Class.php"); // getControllerInstance("Dao") 사용할경우 생략가능
class User extends Controller {

    var $user_id;
    var $user_pw;
    var $user_name;

    var $data_list = array();

    function User () {
        $this->Dao = new Dao;             //$this->getControllerInstance("Dao"); 로 대체 가능.
        $this->Dao->transaction = true;
        $this->Dao->connect();
    }

    function viewUserRegForm() {
        $this->result_uri    = "user_reg.html";
        $this->dispatcher();
    }

    // POST 로 전송된 값을 맴버변수로 세팅합니다.
    function setPostVars() {
        $this->user_id       = $_POST['user_id'];
        $this->user_pw      = $_POST['user_pw'];
        $this->user_name  = $_POST['user_name'];
    }

    //위에서 저장된 맴버변수 값을 DB에 Insert 합니다.
    function regUser() {
       
        $this->setPostVars();
       
        $query = " Insert Into user_info(user_id,user_pw,user_name,reg_date) values(?,password(?),?,NOW()) ";
        $this->Dao->prepareStatement($query);
       
        $param = array($this->user_id,$this->user_pw,$this->user_name);
        $this->Dao->setParam($param);
       
        $this->Dao->executeStatement();

        $this->Dao->closeStatement();
       
        //echo "회원가입에 성공했습니다.";
        $this->result_uri    = "/User/getUserList";
        $this->redirect();

    }

    function getUserList() {
      
        $this->data_list = array();

        $query = " Select * From user_info ";
        $this->Dao->executeQuery($query);

        while($rows = $this->Dao->getFetchArray()) {
            $this->data_list[] = $rows;
        }

        $this->result_uri    = "list.html";
        $this->dispatcher();       

    }
}
?>

위 소스중 echo 로 출력해주는 부분은 주석처리하고 아래 해당 페이지로 바로 이동 (redirect) 시켜줍니다.


브라우저에서 확인하여 회원가입 -> 리스트화면 -> 회원가입화면 의 형식으로 이동이 되는지 확인합니다.

'기본예제 > 회원관리' 카테고리의 다른 글

회원데이터의 삭제 :: Spac에서 변수의 전달처리  (0) 2009.12.04
1. 회원가입 예제  (0) 2009.12.01
Posted by webdata
첫번째 예제로 브라우저 화면에 "Hello World" 를 출력하는 프로그램을 만들어보겠습니다.

예제를 수행하기 위해 "Controller.ini" 파일의 설정값을 약간 수정하겠습니다.

아래는 "Controller.ini" 파일의 일부입니다. 아래 해당하는 항목을 아래의 경로로 수정합니다.

modelPath = "../Spac/model"                ; 모델클래스의 경로
viewPath = "../Spac/view"                     ; 뷰의 경로
.
.
.
errPrintView = true                                 ; 에러 화면출력
.
.
useViewCache = false                           ; 뷰캐시 기능 끔


위와 같이 모델경로와 뷰경로를 변경 하고 예제를 작성해보겠습니다.


모델클래스를 만들기 전에 클래스 생성 규칙이 있습니다.

1. Spac 에 사용되는 클래스명은 알파벳 대/소문자, 숫자, 언더바 만 사용 가능하며
2. 클래스명의 첫글자는 알파벳 대문자로 시작해야 합니다.
3. 마지막으로 파일명은 "클래스명.Class.php" 로 생성해야 합니다.
4. 클래스파일내에 클래스를 작성할때 클래스명의 선언은 파일의 "클래스명" 과 동일하여야 합니다.
5. 클래스를 작성할때는 클래스명과 동일한 메소드(생성자) 외에 기본 실행 메소드가 반드시 존재해야 합니다.
   Spac에서는 기본메소드명을 "execute" 로 정하고 있습니다.


아래와 같이 클래스의 명명규칙에 따라 모델경로 내에 "HelloWorld.Class.php" 파일을 작성합니다.





간단한 "Hello World" 어플리케이션이 완성되었습니다.

이제 이 어플리케이션을 실행해 보겠습니다.
브라우저에 아래처럼 주소를 입력하고 실행합니다.


작성한 모델클래스를 웹브라우저에서 호출하는 방법은 http://www.mydomain.com/?/클래스명/메소드명 의 방식으로 호출합니다.

아파치 서버를 사용하는 경우 "Rewrite" 설정을 통해 ".htaccess" 파일을 생성한 후, 주소의 물음표(?) 를 없애 더욱 깔끔한 주소를 사용할 수도 있습니다만,
이는 별도의 메뉴에서 설명하고, 여기서는 일반적으로 호출 할 수 있는 방식을 설명드리겠습니다.


위에서 2개의 주소를 안내한 이유는 클래스내에 "execute" 메소드가 있는경우에는 생략이 가능하다는것을 보여주기 위해서 입니다.
"execute" 메소드는 Spac 모델클래스의 기본 실행 메소드 입니다.
즉, 브라우저 주소에 메소드명을 명시하지 않으면 기본 메소드인 "execute" 메소드가 호출되게 됩니다.


Posted by webdata