PHP自定义模板类

时间:2011-10-03 18:29:01

标签: php model-view-controller oop templates

由于我决定重新转换方向盘并编写一个不断增长的MVC,我虽然有一个模板类会很酷。现在我从未做过任何复杂的模板,除了简单的包含模板。现在我写了这个基类,这是我的概念解释如下。这是编写网页模板的正确方法/概念吗?

概念 “任何Template类都将扩展此类.Controller将修改单个部分或全部。如果控制器仅使用set动作修改内容,则页面将仅更改一个组件,其他部分将保持相同,就像包括页眉/页脚一样会做“

另一个问题是,如何传递相同的页面对象,以便在对象中缓存未更改的部分(因为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*/

1 个答案:

答案 0 :(得分:2)

这种方法并不是一个模板类。它只是收集了一些页面部分片段。

如果我可以这样说的话,你的方法非常糟糕。使用$action=="get"=="set"甚至比广泛使用的getter和setter方法更糟糕。 (使属性成为私有或受保护只是因为语法存在或者由于某些安全性或正确的编码神话而没有多大意义。)
 然后调用方法attribute_ func ()同样无用地重复。

使它成为一个数组。在那里分配你的html片段。