zpf 视图
2014年8月19日 18:12:16
smarty使用了2年,
使用PHP本身做模版引擎也有4个多月了,
最终还是在我的这个框架中抛弃了smarty,转用原生的PHP代码做模版引擎,并简单写了一个视图类,还没有实现缓存功能
视图类文件在core/view.php
控制器中的使用方法(代码在current_module/controller/xxx.php):
class _index extends Main
{
public function initc()
{ } public function index()
{
$this->view->a = 111;
$this->view->b = 222;
$this->view->c = 333;
$this->show('test');
}
}
模版中使用变量(模版放在current_module/views/current_controller/test.php):
<?= $a, $b, $c ?>
模版中完全使用PHP的语法规则,不像smarty中又定义了一套语法规则
下边是简单的view类
<?php
/**
* 视图类
*
*/
class View
{
public $prefix = '';
public $module = '';
public $controller = '';
public $action = '';
public $arrSysVar = array(); public function __construct($module, $controller, $action, $arrSysVar)
{
$this->module = $module;
$this->controller = $controller;
$this->action = $action;
$this->arrSysVar = $arrSysVar;
$this->prefix = MODULEPATH.$this->module.'/'.VIEW_FLODER_NAME.'/'.$this->controller.'/';
} //备用初始化
public function init($module, $controller, $action, $arrSysVar)
{
$this->module = $module;
$this->controller = $controller;
$this->action = $action;
$this->arrSysVar = $arrSysVar;
$this->prefix = MODULEPATH.$this->module.'/'.VIEW_FLODER_NAME.'/'.$this->controller.'/';
} //显示到浏览器
//可以重写该方法, 多次调用fetch()来渲染多个页面, 如后台开发的时候,
//顶部/左侧菜单栏/底部 可以统一渲染, 每次只用传入body页面的文件名
public function show($filename)
{
$content = $this->fetch($filename);
// header('Content-Type: ---'.'; charset=utf-8');
// header('Cache-control: ---');
// header('X-Powered-By:zhangzhibin');
echo $content;
} //输出内容到变量
public function fetch($filename)
{
$filename = !empty($filename) ? $filename : $this->action;
$filepath = $this->prefix.$filename.PHP_FILE_EXTENSION; $arrObjViewData = get_object_vars($this);
extract($arrObjViewData); //将普通变量置为全局可访问
extract($this->arrSysVar); //将系统变量置为全局可访问 ob_start();
ob_implicit_flush(0); //渲染传入的模版
require_once($filepath); return ob_end_flush(); //输出到变量, 并清除缓存
}
}
zpf 视图的更多相关文章
- Asp.Net Mvc视图引擎Razor介绍
1.Razor介绍 1)ASP.NET MVC3 带来了一种新的名为Razor 的视图引擎,提供了下列优点: Razor 的语法简单且清晰,只需要最小化的输入 Razor 容易学习,语法类似于 C# ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入
原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...
- 在WPF中使用依赖注入的方式创建视图
在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...
- ABP文档 - Mvc 视图
文档目录 本节内容: 简介 AbpWebViewPage 基类 简介 ABP通过nuget包Abp.Web.Mvc集成到Mvc视图里,你可以像往常那样创建常规的视图. AbpWebViewPage 基 ...
- 探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- SQL Server-聚焦在视图和UDF中使用SCHEMABINDING(二十六)
前言 上一节我们讨论了视图中的一些限制以及建议等,这节我们讲讲关于在UDF和视图中使用SCHEMABINDING的问题,简短的内容,深入的理解,Always to review the basics. ...
- SQL Server-聚焦使用视图若干限制/建议、视图查询性能问题,你懵逼了?(二十五)
前言 上一节我们简单讲述了表表达式的4种类型,这一系列我们来讲讲使用视图的限制,简短的内容,深入的理解,Always to review the basics. 避免在视图中使用ORDER BY 上一 ...
随机推荐
- Java设计模式-状态模式(State)
核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线.隐身.忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1.可以通过改变状 ...
- 【HDU 1228】A + B
题 Description 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. Input 测试输入包含若干测试用例,每个测试用例占一行,格式 ...
- Android中实现自定义的拍照应用
可以参考:http://www.android-doc.com/guide/topics/media/camera.html 一.添加相应的权限 <uses-permission android ...
- Oracle查看锁表
查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, a ...
- 22.Android之ExpandableListView树形列表学习
Android经常用到树形菜单,一般ExpandableListView可以满足这个需要,今天学习下. XML代码: <?xml version="1.0" encoding ...
- 获取Trustedinstalled权限.reg
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*\shell\runas] @="获取TrustedInstaller权限&q ...
- 通知栏Notification的学习
转:http://blog.csdn.net/yczz/article/details/28416893 在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理 ...
- 桂电在linux环境下使用出校器
一.官方出校器(无界面) 由于学校官方最新的linux版出校器无效,我们只能使用老版本的出校器了. 但因为老版本的出校器是32位的,而现在主流使用的是64位系统,因此我们得安装32位库. 在ubunt ...
- anr产生的原理&如何避免(android)
- boost构造,解析json
void asynDBCenter::isGetActorInfoEx(void* on_process, const char* arg) { std::stringstream ros(arg); ...