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

这个概念是,当用户第一次加载页面时,根据用户模板加载首页。例如,用户可以使用标题菜单侧边栏内容和页脚,但其他用户可能不止这些。所以具体的类会根据需要设置这些基本组件,并设置它们将如何渲染。在随后的查询中,只有一个或两个部分将从模板对象进行修改。 –