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 视图的更多相关文章

  1. Asp.Net Mvc视图引擎Razor介绍

    1.Razor介绍 1)ASP.NET MVC3 带来了一种新的名为Razor 的视图引擎,提供了下列优点: Razor 的语法简单且清晰,只需要最小化的输入 Razor 容易学习,语法类似于 C#  ...

  2. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  3. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

  4. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  5. ABP文档 - Mvc 视图

    文档目录 本节内容: 简介 AbpWebViewPage 基类 简介 ABP通过nuget包Abp.Web.Mvc集成到Mvc视图里,你可以像往常那样创建常规的视图. AbpWebViewPage 基 ...

  6. 探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  7. 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  8. SQL Server-聚焦在视图和UDF中使用SCHEMABINDING(二十六)

    前言 上一节我们讨论了视图中的一些限制以及建议等,这节我们讲讲关于在UDF和视图中使用SCHEMABINDING的问题,简短的内容,深入的理解,Always to review the basics. ...

  9. SQL Server-聚焦使用视图若干限制/建议、视图查询性能问题,你懵逼了?(二十五)

    前言 上一节我们简单讲述了表表达式的4种类型,这一系列我们来讲讲使用视图的限制,简短的内容,深入的理解,Always to review the basics. 避免在视图中使用ORDER BY 上一 ...

随机推荐

  1. 【深入】java 单例模式(转)

    [深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便 ...

  2. TCP/IP详解 笔记九

    广播和多播 多播和广播只能用于UDP包,TCP明确在两个进程间建立连接. 多播:帧只传送给属于多播组的多个接口 主机对帧的过滤过程: 通常网卡只接收那些目的地址为本物理接口地址或广播地址的帧:设置为混 ...

  3. JAVA-封装

    1.什么是封装? 顾名思义,封装就是装起来,圈起来的意思,用于类与对象中来讲,就是在一个类中把对象拥有的属性和隐藏信息(条件)进行封装,不允许外部程序直接访问,而必须要通过该类提供的方法来实现对隐藏信 ...

  4. [Angularjs]视图和路由(一)

    写在前面 对单页应用来讲,视图和路由的作用可以从一个视图跳转到另外一个视图,可以合理管理用户在使用过程中看到的界面. 将视图分解成布局和模版视图,并且根据用户当前访问的URL来展示对应的视图,将会是一 ...

  5. js中数组以及for循环的使用

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...

  6. std::shared_ptr(二)

    Defined in header <memory>       template< class T > class shared_ptr;   (since C++11)   ...

  7. Practical Machine Learning For The Uninitiated

    Practical Machine Learning For The Uninitiated Last fall when I took on ShippingEasy's machine learn ...

  8. Js注册等待

    <为维护网上公共秩序和社会稳定,请您自觉遵守以下条款: <br> <br>  一.不得利用本站危害国家安全.泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用 ...

  9. 使用spring集成hibernate

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  10. 在命令行中运行eclipse中创建的java项目

    在命令行中运行eclipse中创建的java项目 博客分类: java相关 javaeclipse命令行  由于项目要求,需要对eclipse中的项目进行打包,似的可以在客户机上不装eclipse的情 ...