2011-10-03 119 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

[谷歌是一個很好的開始。](http://www.google.com/search?q=php +模板+引擎)找到這些模板系統中的任何一個,看看它們是如何實現的。決定你喜歡什麼,而不是幾個。然後重新開始。上面介紹的代碼幾乎包含了代碼可能出錯的所有內容。從糟糕的評論,到重新實現破碎的getter/setter概念,實際上並沒有對模板有用。 – DampeS8N

回答

2

這種方法不是模板類。它只是收集一些頁面部分片段。

如果我可以這樣說,你的方法是非常糟糕的。使用$action=="get"=="set"比這個假設模擬的廣泛的getter和setter方法更糟糕。 (使屬性私有或受保護的,只是因爲存在語法錯誤或因爲一些安全或適當的編碼神話沒有多大意義的。)
,然後調用方法attribute_func()同樣是無益的repetetive。使其成爲數組。在那裏分配你的HTML片段。

+0

感謝您的積極批評。我還沒有明白你的意思,「把它做成一個數組,在那裏分配你的html代碼片斷」。你能否詳細說明一下? –

+0

您的整個'TemplateBase'可能只是一個'ArrayObject'。但是如果你真的只收集並且稍後打印出原始的html部分,那麼一個普通的''array'就足夠了。您需要詳細說明應該如何使用/使用它以獲得更具體的答案。 – mario

+0

這個概念是,當用戶第一次加載頁面時,根據用戶模板加載首頁。例如,用戶可以使用標題菜單側邊欄內容和頁腳,但其他用戶可能不止這些。所以具體的類會根據需要設置這些基本組件,並設置它們將如何渲染。在隨後的查詢中,只有一個或兩個部分將從模板對象進行修改。 –