活用工厂模式调用smarty

   最近项目用了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语句还是要小改的。达到了工厂模式一样的效果,也算一种书上没有的(至少我看过的没有)设计模式吧。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值