smarty模板相关知识
-
PHP 自定义 Smarty 模板引擎类smarty模板引擎类简单工作原理利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件。例如 模板文件中{$title} 利用正则表达式找到并替换成 <?php echo $this->vars['title'];?>自定义 Smarty 模板引擎类 smarty.class.php页面<?php/* * 自定义Smarty模板引擎类 */ class Smarty{ private $vars = array(); //第一个向模板中分配变量 //有两个参数 一个参数
-
PHP Smarty 模板 if函数 foreach函数从数据库查询数据,浏览器以表格形式显示 模板页面<table border="1" width="800" align="center"><caption>用户信息表</caption> <{foreach $tdname as $val}> <th><{$val}></th> <{/foreach}> <
-
前后端分离开发部署模式【转】转自:http://www.qttc.net/201506464.html0x01 传统开发模式相信很多做过Web开发童鞋应该都会经历这样一种开发模式,利用后端语言提供的模版引擎编写HTML/XML页面,比如:PHP 开发有 Smarty模板引擎Java web工程有jsp页面Python 各个Web框架都有各自的模板引擎NodeJS 的express你懂得都有一个共同的特点,服务器端后台语言生成解析后的HTML/XML格式返回给客户端,例如浏览器端访问直接返回解析好的HTML,浏览器直接就解释执行。0x02 Ajax过渡Ajax是把前后端分离部署的推进者,当时网页局部更新就是未来前后端分离的开端。那什么是前后端分离开发呢?简单来说就是前端开发不需要部署后台语言那堆垃圾环境,后端开发也不需要前端写好的任何程序,后台只管暴露各种API接口提供前端进行数据的增删改查,不负责生成HTML页面前端请求到数据后再动态声称dom节点。0x03 前端构建相对于后台来说,前端构建是重点,因为前后端分离开发后侧重点在于前端,
-
【大前端之前后分离01】JS前端渲染VS服务器端渲染前言之前看了一篇文章:@Charlie.Zheng Web系统开发构架再思考-前后端的完全分离,文中论述了为何要前后分离,站在前端的角度来看,是很有必要的;但是如何说服团队使用前端渲染方案却是一个现实问题,因为如果我是一个服务器端,我便会觉得不是很有必要,为什么要前后分离,前后分离后遗留了什么问题,如何解决,都得说清楚,这样才能说服团队使用前端渲染的方案,而最近我刚好遇到了框架选型的抉择。来到新公司开始新项目了,需要做前端框架选型,因为之前内部同事采用的fis框架,而这边又是使用的php,这次也就直接采用fis基于php的解决方案:http://oak.baidu.com/fis-plus说句实话,fis这套框架做的不错,但是如果使用php方案的话,我就需要蛋疼的在其中写smarty模板,然后完全按照规范走,虽然fis规范比较合理,也可以接受,但是稍微深入解后发现fis基于php的方案可以概括为(我们的框架用成这样,不特指fis):服务器端渲染html全部图给浏览器,再加载前端js处理逻辑显然,这
smarty模板相关课程
smarty模板相关教程
- 2.1 模板 称其为动态页面模板可能更准确。模板中至少应该包括 2 部分内容:HTML、CSS 等 : 为模板中的数据提供版式和样式;强逻辑性语言: 提供数据逻辑能力,可以自动更新模板中的数据。Tips: 不同视图技术的模板可嵌入的强逻辑性语言不同。本文讲的 JAVA 程序,这里的强逻辑性语言指的是 JAVA 。每一种视图技术都会有自己的模板语法,开发者编写模板时必须遵循模板语法。
- 3. 代码模板 我们上一节使用的 Content Assist 功能其实是调用了 Eclipse 中代码模板的内容。代码模板其实就是对源代码中再次出现的代码模式的一种描述。上面的解释比较绕口,简单来说就是代码片段的重用。Eclipse 中已经定义了很多通用的代码模板了。我们可以打开设置,然后在搜索框中搜索 template,然后就可以找到我们通过快捷键 Alt + / 调出来的 for 模板,如下图所示:这里,我们还可以对模板进行增删改等操作,有兴趣的同学可以自行尝试。
- 1. 什么是模板 模板在生活中也是非常常见的,比如我们上学时向老师请假,会有请假条的模板,只需在请假条模板中填写请假人以及请假原因就可以。HTML 的模板也是如此,只不过我们会有特殊的语法来完成一个模板,接下来会有对应的模板引擎来帮我们将传入的数据和模板中变量进行一一对应并最终形成一个完整的 HTML 文件。例如下面的一个最简单的模板文件:<html><head></head><style type="text/css"></style><body><h1>{{ title }}</h1></body></html>这个简单的模板中,我们只有一个模板变量 title,用 {{ 和 }} 括起来。模板引擎会对这些变量进行数据替换,比如传入数据 {'title':'标题1'},那么模板引擎就会将 {{ title }} 直接替换成 标题1 字符串。不同的模板引擎支持不同的语法格式。在 Django 中应用最为广泛的模板引擎当属 Jinja2 了,当然它也是 Flask 框架默认使用的模板系统。
- 4. 模板方法模式 模板方法模式是定义一个操作中的算法的骨架,从而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。通常对于一些重要的复杂方法和多个子类共有的方法且逻辑相同的情况下会使用模板方法模式。比如用户第三方用户认证的时候就比较适合使用模板方法。我们来看一个例子:假设我们现在需要用到微信、微博的第三方用户授权来获取用户的信息。//使用模板方法模式描述获取第三方用户信息的过程 public abstract class Authentication{ public void checkUserAuthentication(){ checkIdentity(); fetchInfo(); } protected abstract void checkIdentity(); protected abstract void fetchInfo(); } //微信用户 public class WechatAuthenication extends Authentication{ @Override protected void checkIdentity() { System.out.println("获得微信用户授权"); } @Override protected void fetchInfo() { System.out.println("获取微信用信息"); } } //微信用户 public class WeiboAuthenication extends Authentication{ @Override protected void checkIdentity() { System.out.println("获得微博用户授权"); } @Override protected void fetchInfo() { System.out.println("获取微博用信息"); } } //调用模板方法 public class Demo{ public static void main(String...s){ Authentication auth = new WechatAuthenication(); auth.checkUserAuthentication(); auth = new WeiboAuthenication(); auth.checkUserAuthentication(); } }输出结果:获得微信用户授权 获取微信用信信息 获得微博用户授权 获取微博用信信息现在我们使用 Lambda 表达式换个角度来思考模板方法模式。如果我们用函数式接口来组织模板方法中的调用过程,相比使用继承来构建要显得灵活的多。//定义一个处理接口,用来处理一项事务,如授权或者获取信息。 public interface Processer{ public void process(); } //封装调用过程 public class Authentication{ private final Processer identity; private final Processer userinfo; public Authentication(Criteria identity,Criteria userinfo){ this.identity = identity; this.userinfo = userinfo; } public void checkUserAuthentication(){ identity.process(); userinfo.process(); } } //使用模板方法 public class Demo{ Authentication auth = new Authentication(()->System.out.println("获得微信用户授权"), ()->System.out.println("获取微信用户信息")); auth.checkUserAuthentication(); auth = new Authentication(()->System.out.println("获得微博用户授权"), ()->System.out.println("获取微博用户信息")); auth.checkUserAuthentication(); }输出结果:获得微信用户授权 获取微信用信信息 获得微博用户授权 获取微博用信信息此时,我们的模板方法得到了大幅的简化,同时通过函数接口让模板方法获得了极大的灵活性。
- 2.2 模板化流程 先画一个图,简要说一下模板化的基本思路:一个模板对象中有 2 种类型代码:模板代码: 公共的代码,不需要变更的代码;通知代码: 告诉调用者,此处应该是你来做了。一般采用接口的方式进行通知。可以得出一个结论,对于一件事情,原来完全是靠调用者独立完成,现在分摊到了两个对象上,模板对象完成公共部分代码,调用者完成属于自己需求的代码。有了上面的理解基础,便知,一个完整的模板调用过程,会涉及到 3 个角色:调用者角色: 使用者;模板角色: 封装公共代码,简化使用者的操作;接口角色: 调用者和模板角色之间的连接通道,互相通信;下面进行具体实例编写:构建一个 HibernateTemplate 类,模板角色:public class HibernateTemplate<T extends Serializable > { private SessionFactory sessionFactory; public HibernateTemplate() { // 模板代码 Configuration configuration = new Configuration().configure(); // 模板代码 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry(); // 模板代码 sessionFactory = configuration.buildSessionFactory(serviceRegistry); } public T template(Notify<T> notify) { // 模板代码 Session session = sessionFactory.openSession(); // 模板代码 Transaction transaction = null; try { // 模板代码 transaction = session.beginTransaction(); // 通知代码 T result = notify.action(session); transaction.commit(); return result; } catch (Exception e) { transaction.rollback(); } finally { session.close(); } return null; }}接口角色:public interface Notify<T extends Serializable> { T action(Session session);}调用者角色:此处为测试实例:HibernateTemplate<Student> hibernateTemplate=new HibernateTemplate<Student>(); Student stu= hibernateTemplate.template(new Notify<Student>() { @Override public Student action(Session session) { return (Student)session.get(Student.class, new Integer(1)); } }); System.out.println(stu.getStuName());控制台输出结果不再贴出。不要怀疑,结果一定是你所期望的。模板对象中的接口非常重要:通知作用,并等待调用者的响应。接口中的方法也可称为回调方法;模板对象通过接口的方式暴露出 Session 给调用者,调用者不需要关心 Session 是怎么来的,安心使用便是。模板对象中可以进一步封装 Session 对象中的相关方法,如:public T get(Class<?> clz, Serializable ser) { // 模板代码 Session session = sessionFactory.openSession(); // 模板代码 Transaction transaction = null; try { // 模板代码 transaction = session.beginTransaction(); T result = (T) session.get(clz, ser); transaction.commit(); return result; } catch (Exception e) { transaction.rollback(); } finally { session.close(); } return null;}测试实例:HibernateTemplate<Student> hibernateTemplate=new HibernateTemplate<Student>(); Student stu= hibernateTemplate.get(Student.class, new Integer(1)); System.out.println(stu.getStuName()); 是不是开心的不要不要的,除了在模板类中需要写一次 Hibernate 常规流程外,具体操作时,直接上模板对象。对于任何知识不要理所当然地接受,要善于发现代码中冗余的地方,逐步形成代码意识,随时改进代码。
- 3.4 模板 user.html 创建模板 user.html:<html><body> <h2>name = {{ name }}</h2> <h2>gender = {{ gender }}</h2></body></html>
smarty模板相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议