区块(Block)数据绑定技术

介绍了一种名为“区块数据绑定技术”的PHP开发方法,该技术允许将页面划分为多个区块,每个区块拥有独立的实现类负责显示和操作,类似于Java中的Struts/Tiles框架。

最近想出这么个点子,像开发Java一样开发PHP程序(仅架构而已),以前在Java中使用的Struts/Tiles,很不错,在PHP中只有Smarty模板生成引擎这样孤单地实现,还没发现一套可灵活使用的开发框架。于是,偶就试验了这个点子...

这个点子我取名叫“区块数据绑定技术”,关于这个技术我是这样定义的:一个页面(page)由一个或多个区块(block)组成,每个区块都有其实现类,负责区块内容的显示和操作。

下面是测试成功的样本代码,大家可以看一看,还有没有更好玩儿的特性能添加进去:

Cmspad.php 区块实现类代码
  1. <?php  
  2. import('Block');   
  3. class Cmspad extends Block {   
  4.   
  5.     function pageHead(){   
  6.         return "   
  7.         <form name='hello' bind='Cmspad' action='' method='post'>  
  8.             <input type='text' name='formAjaxText2' value='formAjaxText2'/>  
  9.             <input type='submit' value='Submit'/>  
  10.         </form>";   
  11.     }   
  12.   
  13.     function pageBody(){   
  14.         return "This is body";   
  15.     }   
  16.   
  17.     function pageFooter(){   
  18.         return "   
  19.         <form name='methodTest' bind='Cmspad.world' action='' method='post'>  
  20.             <input type='text' name='formAjaxText1' value='formAjaxText1'/>  
  21.             <input type='submit' value='Submit'/>  
  22.         </form>";   
  23.     }   
  24.   
  25.     function formHello($response, $values){   
  26.         $response->addAlert("Hello: ".$values['formAjaxText2']);   
  27.     }   
  28.   
  29.     function formWorld($response, $values){   
  30.         $response->addAlert("World: ".$values['formAjaxText1']);   
  31.     }   
  32. }   
  33. ?>  

其中,pageXXX为区块内容显示函数,当前有 head、body、footer 三个显示方法;formXXX是区块内容处理函数,使用Ajax进行数据传输,当前有 hello 和 world 处理过程,这两个过程在pageHead和pageFooter中定义的表单里可以看到绑定的内容。继续往下看:

index.php前台显示页代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html>  
  3. <head>  
  4. <title>CMSPAD Block Databinding Test</title>  
  5. <?php include('cmspad_block.php') ?>  
  6. </head>  
  7. <body>  
  8. <div id="main" >  
  9.   <DIV id="head" bind="Cmspad.head"></DIV>  
  10.   <div id="body" bind="Cmspad"></div>  
  11.   <div id="foot" bind="Cmspad.footer"></div>  
  12. </div>  
  13. </body>  
  14. </html>  

当前大家应该注意到了,里面的DIV中,有个bind属性,这就是区块数据绑定的关键。从这个页面可以看出,index.php页总共有三个区块,ID分别是 head、body、foot,他们绑定显示内容的方法是 Cmspad.head、Cmspad.body、Cmspad.footer 方法,转换成实际的类方法,就是 Cmspad.pageHead、Cmspad.pageBody、Cmspad.pageFooter 方法,这时,现实的效果就像如下的截图。

 点击第一个按钮的效果

点击第二个按钮的效果

大家看到了,当点击第一个 Submit 按钮的时候,弹出了这个对话框,而这个对话框的内容在 区块实现代码 中可以找到,那就是 Cmspad.formHello 里的方法,第二个按钮同理。

这意味着什么,每个页面的去管只需要负责它自身范围的内容和操作即可,不需要涉及太多东西。这样再加上Smarty模板技术,美工和程序员就可以分开工作了,起码不用为代码变动而吵来吵去~:)

PS:一大早上写这个,大脑还是有些迷糊,看不懂的朋友们别介意,呵呵。此实现的完整版(包含Smarty模板引擎和其他好玩儿的特性)已加入到CMSPAD项目中,关于该项目的具体开发进度看这里:http://yipsilon.iteye.com/blog/80249

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值