2011-10-03 6 views
1

휠을 다시 차고 점점 커지는 MVC를 작성하기로 결정한 이래로 템플릿 클래스를 사용하는 것이 좋습니다. 이제는 간단한 템플릿을 포함하는 복잡한 템플릿을 작성한 적이 없습니다. 이제이 기본 클래스를 작성했으며 여기에 내 개념이 설명되어 있습니다. 이 올바른 방법/웹 페이지 서식 파일 작성의 개념입니까?PHP 사용자 정의 템플릿 클래스

개념은 "모든 템플릿 클래스.이 클래스를 확장합니다 컨트롤러는 단일 부품을 수정합니다 또는 컨트롤러는 세트 작업을 사용하여 내용을 수정할 경우 모두., 다음 페이지는 하나 개의 구성 요소를 변경하고 다른 부분은 유지됩니다 머리말/꼬리말을 포함하는 것과 똑같은 일을 할 것입니다. "

또 다른 질문은, 동일한 페이지 객체를 전달하여 변경되지 않은 부분이 객체에 캐시되도록하는 것입니다 (http는 상태 비 저장 프로토콜이므로). 세션을 시작하고 세션에 객체를 저장해야합니까? 부모가 싱글 톤이되어야합니까? 감사합니다.

<?php 

class TemplateBase{ 
    //variables corresponding to part of web page 
    private $header; 
    private $footer; 
    private $body; 
    private $menu; 
    private $left_side; 
    private $right_side; 
    private $menu_header;//between menu and header 
    private $menu_content;//between menu and content 

    public function __construct(){ 
     //no inits for now 
    } 

    //header 
    public function header_func($action, $value=null){ 
     if($action=="get"){ 
      return $this->header; 
     } 

     if($action=="set"){ 
      $this->header = $value; 
     } 
    } 

    //footer 
    public function footer_func($action, $value=null){ 
     if($action=="get"){ 
      return $this->footer; 
     } 

     if($action=="set"){ 
      $this->footer = $value; 
     } 
    } 

    //body 
    public function contents_func($action, $value=null){ 
     if($action=="get"){ 
      return $this->body; 
     } 

     if($action=="set"){ 
      $this->body = $value; 
     } 
    } 

    //left side 
    public function left_bar_func($action, $value=null){ 
     if($action=="get"){ 
      return $this->left_side; 
     } 

     if($action=="set"){ 
      $this->left_side = $value; 
     } 
    } 

    //right side 
    public function right_bar_func($action, $value=null){ 
     if($action=="get"){ 
      return $this->right_side; 
     } 

     if($action=="set"){ 
      $this->right_side = $value; 
     } 
    } 

    //menu 
    public function menu_func($action, $value=null){ 
     if($action=="get"){ 
      return $this->menu; 
     } 

     if($action=="set"){ 
      $this->menu = $value; 
     } 
    } 

    //between menu and content 
    public function menu_content_func($action, $value=null){ 
     if($action=="get"){ 
      return $this->menu_content; 
     } 

     if($action=="set"){ 
      $this->menu_content = $value; 
     } 
    } 

    //between menu and header 
    public function menu_header_func($action, $value=null){ 
     if($action=="get"){ 
      return $this->menu_header; 
     } 

     if($action=="set"){ 
      $this->menu_header = $value; 
     } 
    } 

} 

/*End of file*/ 
+0

다시 시작하십시오. 기존 템플릿 시스템을 검토 한 다음 다시 시작하십시오. – DampeS8N

+0

시작 위치 (추천 링크 등)에 대한 설명은 "처음부터 다시 시작"하는 것보다 유용합니다. –

+0

[Google은 시작하기 좋은 곳입니다.] (http://www.google.com/search?q=php + templating + engines) 이러한 템플릿 시스템을 찾아서 어떻게 사용하는지 확인하십시오. 당신이 좋아하는 것을 결정하고 몇 가지를하지 마십시오. 그런 다음 다시 시작하십시오. 위에서 제시 한 코드에는 코드에 문제가있을 수있는 거의 모든 것이 있습니다. 열악한 설명부터 깨진 getter/setter 개념의 재 구현, 실제로 템플릿에 유용하지 않은 것까지. – DampeS8N

답변

2

이러한 접근 방식은 많은 템플릿 클래스가 아닙니다. 보이는대로 몇 페이지 분량의 스 니펫을 수집합니다.

내가 그렇게 말하면, 당신의 방법은 정말 끔찍합니다. $action=="get"=="set"을 사용하는 것은 이것이 범용 적으로 에뮬레이트하는 getter 및 setter 메소드보다 훨씬 나쁩니다. 구문이 존재하기 때문에 또는 속성이 올바르지 않거나 적절한 코딩 신화로 인해 속성이 비공개 또는 보호되도록 설정하는 것은 의미가 없습니다. func() 마찬가지로 무의식적으로 반복적입니다.

배열로 지정합니다. HTML 스 니펫을 여기에 지정하십시오.

+0

긍정적 인 비판에 감사드립니다. 나는 당신이 "배열로 만드십시오."라고 당신이 의미하는 것을 이해하지 못했습니다. 당신의 HTML 스 니펫을 거기에 할당하십시오. " 정교하게 주시겠습니까? –

+0

전체'TemplateBase'는 단지'ArrayObject' 일 수 있습니다. 그러나 정말로 html 부분을 원시로 만 수집하고 나중에 인쇄한다면 평범한 오래된'array'만으로도 충분할 것입니다. 보다 구체적인 답변을 위해 어떻게 사용/활용되어야하는지에 대해 자세히 설명해야합니다. – mario

+0

개념은 사용자가 처음 페이지를로드 할 때 사용자 템플릿에 따라 첫 페이지를로드한다는 것입니다. 예를 들어, 사용자는 헤더 메뉴 사이드 바 콘텐츠와 바닥 글이있는 클래스를 가질 수 있으며, 다른 사용자는 그 이상의 항목을 가질 수 있습니다. 따라서 구체적인 클래스는 필요한 기본 구성 요소를 설정하고 렌더링 방법을 지정합니다. 후속 쿼리에서는 하나 또는 두 부분 만 템플릿 객체에서 수정됩니다. –

관련 문제