您的位置:首页 > 编程语言 > PHP开发

PHP高效框架Bonfrire之模板功能

2012-04-19 21:34 197 查看
  许多CMS,Blog等系统都是用PHP开发的, 一部分原有是因为 PHP + MySQL + apache/nginx/IIS 环境比较易搭建

而且还开源, 移植也比较方便。

  可能很多PHP开发人员都在找一个高效,维护容易的框架。我就是其中一位, 一不小心, 我跌入了 CodeIgnter 的怀抱,

刚开始学习PHP, 确实有很多地方很不顺手, 可能是自己太菜, 入手很久, 感觉只搞明白了 CodeIgnter 的皮毛。 后来由于

种种原因, 一位朋友指点我们用国外兴起的一个新的框架 bonfire 。顿时我的新就凉了。CodeIgnter还没搞特别清楚, 又

来了一个新的框架, 经过朋友预先了解此框架, 给我讲解了一下 bonfire 和 CodeIgnter 的区别以及关联。这才知道原来

不是要学习一个崭新的框架, 而是一个把 CodeIgnter 扩展后的高效框架, 只是模式由原来的 MVC 接近无缝的方式升级

为了 HMVC 。

  新手的我自然难以迅速上手, 所以看了一些 bonfire的代码后, 发现最厌恶的事情来了, bonfire 提供了一套 theme

其中分为 前台theme 和 后台theme 。一直以来我都觉得 theme 在这种框架中是很让人厌恶的, 因为他会限制自由。

  正如我所想, 由于一个项目需要在 bonfire 上进行, 一位同事早在我之前开始研究 bonfire ,设计好我们所需的后端

我则在忙完手中的活以后, 被调到协助同事一起实现前段。当天晚上, 好好看了一下同事写的代码。肯定比我写的好, 我

太菜了。不过发现一个有趣的事情, 就是他很好的利用了 bonfire 的 HMVC 模式, 将所有功能都独立的分配到了 modules

模块下, 这样便于每个功能独立的管理, 赞叹了一把, 因为我还不熟悉这种模式。

  第二天, 早上我忙完手上一些简单的事情后, 为了统一编程风格和实现方向, 我们2个人在开会的地方开了一个小会议
一切都比较顺利, 可是不顺利的终归是要来的, 由于我们希望把我们的网站做的足够模块化, 那样不至于修改一处, 影响一堆

所以我们需要把首页中的 3 部分纵向排开的区域作为 3 个模块来实现, 但是要用到模板, 因为那样更容易管理, 同时也给我

提供了一个具有方向性的信息, 使用一个 modules::run(module/class/method) 应该可以实现我所需要的实现方式。
  我先了解理一下该框架的 template , 自己新建另一个简单的 theme 后, 开始了尝试 让局部区域模块化的征程。

由于这个有用的信息, 我尝试 modules::run(module/class/method) 一直会报错, 查看源码对应的函数, 发现返回值一直

是空的, 当然页面看不到变化...但是调试多了, 变化还是有的, 只是很想笑的事情发生了, 页面的模板被加载两次, 这样的页面

你们想一下估计也能想象得到当时的情景, 更何况还有一个 errer 无法 locate file 。难道 bonfire 会 so silly 。事实上, 还是

我们错了, 由于 bonfire 是新出来的框架, 所以说明文档一直在更新完善, 不过在查看许久后, 终于发现了一个让人兴奋的word

"block" 。 是的, "block" 一个让我觉得 bonfire 可以实现高度模块化的途径。

  下面直接讲实现方法, 在 theme 的php文件中, 在需要自定义显示的区域添加如下code

<aside id="cust_define">
<?php echo Template::block('cust_define'); ?>
</aside>


  然后在某一个要 controller 中, 定义一段绑定 view 到这个 block 的 code

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Home extends Front_Controller {

public function index()
{
Template::set_block('cust_define', 'show/main');  // 仔细看这里 aside id 和 view path
Template::render();
}

}


  最后记得检查是否存在 view modules/show/views/main.php

  

  这只是一种方法用来实现这一部分, 这种方法有一个局限性就是,没有经过 model 所以无法给 view 里面传数据,

不需传数据的方法, 这样处理的方式还是比较好的, 当然后续还会跟进有关bonfire的其他相关方法。

当然不一定是最好的, 但是希望有帮助!

  有兴趣的朋友可以加入Bonfire群: 36544181
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: