最近想出这么个点子,像开发Java一样开发PHP程序(仅架构而已),以前在Java中使用的Struts/Tiles,很不错,在PHP中只有Smarty模板生成引擎这样孤单地实现,还没发现一套可灵活使用的开发框架。于是,偶就试验了这个点子...
这个点子我取名叫“区块数据绑定技术”,关于这个技术我是这样定义的:一个页面(page)由一个或多个区块(block)组成,每个区块都有其实现类,负责区块内容的显示和操作。
下面是测试成功的样本代码,大家可以看一看,还有没有更好玩儿的特性能添加进去:
Cmspad.php 区块实现类代码
- <?php
- import('Block');
- class Cmspad extends Block {
-
- function pageHead(){
- return "
- <form name='hello' bind='Cmspad' action='' method='post'>
- <input type='text' name='formAjaxText2' value='formAjaxText2'/>
- <input type='submit' value='Submit'/>
- </form>";
- }
-
- function pageBody(){
- return "This is body";
- }
-
- function pageFooter(){
- return "
- <form name='methodTest' bind='Cmspad.world' action='' method='post'>
- <input type='text' name='formAjaxText1' value='formAjaxText1'/>
- <input type='submit' value='Submit'/>
- </form>";
- }
-
- function formHello($response, $values){
- $response->addAlert("Hello: ".$values['formAjaxText2']);
- }
-
- function formWorld($response, $values){
- $response->addAlert("World: ".$values['formAjaxText1']);
- }
- }
- ?>
其中,pageXXX为区块内容显示函数,当前有 head、body、footer 三个显示方法;formXXX是区块内容处理函数,使用Ajax进行数据传输,当前有 hello 和 world 处理过程,这两个过程在pageHead和pageFooter中定义的表单里可以看到绑定的内容。继续往下看:
index.php前台显示页代码
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <title>CMSPAD Block Databinding Test</title>
- <?php include('cmspad_block.php') ?>
- </head>
- <body>
- <div id="main" >
- <DIV id="head" bind="Cmspad.head"></DIV>
- <div id="body" bind="Cmspad"></div>
- <div id="foot" bind="Cmspad.footer"></div>
- </div>
- </body>
- </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
- 描述: 点击第一个按钮的执行效果
- 大小: 28.5 KB
- 描述: 点击第二个按钮的执行效果
- 大小: 29.7 KB
分享到:
相关推荐
《jQuery实现右侧固定区块技术详解》 在网页设计中,我们常常会遇到一种需求:当用户滚动页面时,希望某个区块能始终固定在屏幕的右侧,这样可以方便用户随时查看或操作。这种效果通常被称为“右侧固定区块”。在这...
在网页设计中,为了提升用户体验,常常会使用到“页面滚动加载”技术,这使得用户在浏览长页面时,内容可以随着滚动条的移动而逐步加载,而不是一次性加载所有内容,减少页面加载时间。本教程将关注如何结合jQuery和...
5. **数据存储与恢复**:使用`.data()`方法存储和读取元素相关数据,帮助跟踪当前选中的区块状态。 6. **DOM操作**:`.html()`, `.append()`, `.prepend()`等方法可以方便地更新元素内容。 7. **CSS操作**:通过`....
例如,我们可以为每个区块设置一个唯一的ID,然后绑定`click`事件。当用户点击某个区块时,会触发相应的回调函数。 ```javascript $("#block1").click(function() { // 切换内容的代码 }); $("#block2").click...
**附录A**:这部分可能详细阐述了使用CBC MAC(Cipher Block Chaining Message Authentication Code)的一种密钥块实现,其中可能还包括可选的区块,以适应不同的安全需求和环境。 在金融行业,特别是涉及到电子...
这些文件通常是以`.xml`为后缀的文件,它们描述了模块的各种配置信息,比如路由信息、区块配置、模型绑定等。配置文件的位置一般位于`app/code/local/Vendor/HelloWorld/etc/config.xml`。 一个典型的`config.xml`...
4. **数据绑定**:在页面的WXML文件中,你需要绑定每个区块的ID到对应的视图元素上。这可以通过`data-`前缀属性来实现,例如`data-anchor="block1"`,然后在JS文件中通过事件参数获取这个ID。 5. **样式优化**:...
- 数据绑定:模板引擎能够将后台数据库的数据绑定到模板的各个部分,确保页面内容实时更新。 - 层级结构:论坛通常包含多个板块和子板块,模板引擎能处理这种层级关系,生成相应的导航结构。 3. **模板语法**: ...
【软件流水技术】 软件流水技术是一种优化循环执行效率的方法,特别是在循环体中存在大量相关性的场景下。在软件流水循环中,循环...非绑定预取允许预取最新数据,并确保对数据的正确处理,即使在预取期间数据已更新。
此方法的核心思想是通过给每个按钮绑定`onclick`事件,当用户点击按钮时,通过for循环遍历所有按钮和内容区块。首先,将所有按钮的背景色重置为默认颜色,然后将被点击的按钮背景色设置为高亮色。接着,隐藏所有内容...
1. **简洁的语法**:`dot.js` 的模板语法简洁明了,易于理解和使用,如 `{{expression}}` 用于输出表达式的结果,`{{#block}}...{{/block}}` 用于定义区块。 2. **数据绑定**:`dot.js` 支持双向数据绑定,可以动态...
### Block 区块/块 - **定义**:在程序中,由一对花括号 `{}` 包围的代码段称为一个块。 - **应用场景**:在函数定义、循环结构等地方广泛使用。 ### Boolean 布林值/布尔值 - **定义**:布尔类型只有两个值:...
- 每个`<li>`元素代表一个菜单项,并通过`onMouseOver`事件绑定`secBoard`函数。 3. **内容容器**:使用`<ul id="main">`创建另一个无序列表作为内容容器。 - 每个`<li>`元素代表一个内容区块,并通过不同的类名...
15. block: 块、区块、语句块,代码中可以分组的独立部分。 16. boolean: 布林值,表示真(true)或假(false)的逻辑值。 17. border: 边框,图形界面元素的外围线。 18. boundschecking: 边界检查,确保变量的值不...
数据绑定 - **`data-widget-config`**:通过JSON格式的数据,为特定类型的控件提供配置信息,此处配置了轮播的动画效果、速度等参数。 - **`data-widget-type`**:指定了控件类型,这里是“Tabs”(标签页)。 ##...
`set_block`还可以用来声明嵌套的区块,如`$t->set_block("rowlist","collist","CL");`。 3. `set_var`: 这个函数用于设置模板变量,将变量替换为指定的值。例如,`$t->set_var("param","boeiBlog");` 将模板中的`...
5. **数据绑定**:`wx:for`指令用于遍历数组并创建多个`swiper-slide`,每个`swiper-slide`的数据来源于`items`数组。例如,`items`可以包含每个区块的内容,如标题、图片等。 6. **性能优化**:为了提高性能,避免...
使用jQuery,我们为图片绑定`mouseover`和`click`事件,来实现标题显示和图片切换效果: ```javascript $(document).ready(function() { $('.image-block').each(function(index) { $(this).find('.title').hide...
在这段代码中,我们首先使用`querySelectorAll`获取所有的tab按钮和内容区块,然后为每个按钮绑定了点击事件处理函数。在函数内部,我们移除所有按钮的`active`类,并将类添加到当前点击的按钮上。同时,我们也移除...
3. **数据绑定**:如果卡片展示动态数据,JavaScript可以用于更新内容。 4. **事件监听**:监听用户的操作,如点击、滑动等,触发相应的功能。 总结,"bem-card-world"项目是一个结合了BEM命名规范、材料设计风格和...