活用工厂模式调用smarty

来源:互联网 发布:sql weekday 编辑:程序博客网 时间:2024/05/03 00:38

   最近项目用了ajax 弹出 网页层,先是把弹出 网页层的模版放在了主要页面的模版文件夹下,不过混在一起不太好。就想把模版放到新的文件夹。


   看了下引用smarty的inc文件,$tmpl = new Smarty;$tmpl->left_delimiter='<{';$tmpl->config_dir=。。。。。


   不想再写一个smarty的inc文件,因为有一个主要的inc文件引用别的inc,你再建另一个主要的inc文件就不好了。想用工厂模式,但php4不支持static方法,也无如此必要,就直接写了个函数。


    

function FTmpFactory($type='')

{

    $smarty = new Smarty;

    if($type == '')

    {

        //default

    }

    if($type=='pop_up')

    ....

}

$tmpl = FTmpFactory();


弹出 网页层的php文件只用写句 $pop_up = FTmpFactory('pop_up');


想看详细的,大约这样写。

function FTmpFactory($type=''){    $smarty = new Smarty;        {// 共用的默认值        $smarty->compile_check = true;        $smarty->debugging = false;        $smarty->caching = false;        //$smarty->left_delimiter = '<{';        //$smarty->right_delimiter = '}>';                // 以下常量除了php魔术常量,都是自定义的常量,如果不定义会出错。        $smarty->template_dir = TEMPLATE_PATH.'/';        $smarty->compile_dir = TEMPLATE_PATH.'_c/';    }        switch ($type)    {//实际上这些中括号并不需要        case '':        {    //根据php的目录路径来确定模版的路径 前提 controllers/$目录 和 view/$目录 的$目录值要一样。            // __DIR__等价于 dirname(__FILE__)。需PHP 5.3。另外如果有改路由规则,不像$_SERVER['PHP_SELF']等,__DIR__还是能得到实际路径            $smarty->config_dir = HTDOCS_PATH.'/'.basename(__DIR__).'/';            break;        }        case 'default':        {            $smarty->config_dir = HTDOCS_PATH.'/';            break;        }        case 'pop_up':        {            $smarty->left_delimiter = '<{';            $smarty->right_delimiter = '}>';            $smarty->config_dir = HTDOCS_PATH.'/pop_up/';            break;        }        case 'mail':        {            $smarty->config_dir = MAIL_TEMP_PATH;            break;        }        default:        {            // $smarty->config_dir = HTDOCS_PATH."/{$type}/"; //已经够用暂不需要            break;        }    }        return $smarty;}$tmpl = FTmpFactory();

首先,先在主引用文件定义$smarty;

然后$tmpl = FTmpFactory($smarty);

function FTmpFactory($tmpl, $type='', $clone_ = true)
{
    $smarty = Clone($tmpl); // 克隆需要php5(php4默认是克隆),不过这是浅克隆,不同克隆对象中的对象的指针还是一样的。
    //...........
    
    return $smarty;
}


    再说一下主要的inc文件引用别的inc的好处,我们项目有一个被它引用的数据库类.inc.php,是pg的。如果要换在mysql数据库,只用改一下被引用的数据库类.inc的名字就可以了。当然,程序中的sql语句还是要小改的。达到了工厂模式一样的效果,也算一种书上没有的(至少我看过的没有)设计模式吧。



原创粉丝点击