phalcon框架与Volt 模块引擎 使用简介
———— 近期工作中web页面使用由C语言编写的Volt模板引擎,相比之前由js动态加载页面速度更快,更利于百度数据的抓取,现根据文档整理一下使用思路
(Volt是一个超快速和设计者友好的模板语言,C语言编写的PHP。它为您提供了一套 助理写一个简单的方法的意见。phalcon框架与其他组件的高度集成, 就像你可以使用它作为一个独立的组件在你的应用程序中。
Volt是一种用C语言编写的超快速并且设计友好的PHP模板引擎,它为你提供了一套很方便的视图助手。Volt与其他的组件高度集成,就像你可以在应用程序中单独使用它一样。
)
1、激活
把Volt 注册到视图组件,并设置一个扩展名称或者使用默认的扩展名 .phtml :
- <?php
- //Registering Volt as template engine
- $di->set('view', function() {
- $view = new \Phalcon\Mvc\View();
- $view->setViewsDir('../app/views/');
- $view->registerEngines(array(
- ".volt" => 'Phalcon\Mvc\View\Engine\Volt'
- ));
- return $view;
- });
- <?php
- $view->registerEngines(array(
- ".phtml" => 'Phalcon\Mvc\View\Engine\Volt'
- ));
2、基本使用方法
Volt的代码是由PHP和HTML构成,Volt中有一组特殊的分隔符,{% ... %}用于执行循环语句和条件判断等,{{ ... }}用于赋值。
可以使用Phalcon\Mvc\View::setVar把控制器中的变量传递到视图中。
- <?php
- class PostsController extends \Phalcon\Mvc\Controller
- {
- public function showAction()
- {
- $post = Post::findFirst();
- $this->view->setVar("title", $post->title);
- $this->view->setVar("post", $post);
- $this->view->setVar("menu", Menu::find());
- $this->view->setVar("show_navigation", true);
- }
- }
在上面的例子中,有三个变量传递到视图中:title, menu 和 post :
3、变量
变量可以有属性,可以通过使用语法访问他们:如:foo.bar。如果他们是数组,你可以使用foo['bar'] 的方式访问
- {{ post.title }}
- {{ post['title'] }}
4、过滤器
变量可以使用过滤器格式化或修改,管道操作符“|”用于接收过滤器过滤变量
- {{ post.title|e }}
- {{ post.content|striptags }}
- {{ name|capitalize|trim }}
5、注释
注释使用{# ... #}分隔符添加注释
6、逻辑语法
1、for循环
- <h1>Robots</h1>
- {% for robot in robots %}
- {% for part in robot.parts %}
- Robot: {{ robot.name|e }} Part: {{ part.name|e }} <br/>
- {% endfor %}
- {% endfor %}
2、if判断
- <h1>Robots</h1>
- <ul>
- {% for robot in robots %}
- {% if robot.type = "cyborg" %}
- <li>{{ robot.name|e }}</li>
- {% else %}
- <li>{{ robot.name|e }} (not a cyborg)</li>
- {% endif %}
- {% endfor %}
- </ul>
7、赋值
可以使用“set”设置或改变变量的值
- {% set fruits = ['Apple', 'Banana', 'Orange'] %}
- {% set name = robot.name %}
8、数学计算
可以使用操作符 + - * % /
9、比较运算符
== != <> > < <= >= === !==
10、逻辑运算符
or and not
11、其他操作符
~ | .. is is not
- {% set robots = ['Voltron', 'Astro Boy', 'Terminator', 'C3PO'] %}
- {% for index in 0..robots|length %}
- {% if isset robots[index] %}
- {{ "Name: " ~ robots[index] }}
- {% endif %}
- {% endfor %}
12、视图集成
Volt 模板集成了 Phalcon\Mvc\View, 你的模板层次结构和默认的层次结构一样,你可以这样使用 partials :
- {{ content() }}
- {{ partial("partials/footer.volt") }}
13、模板继承
你可以创建一个基础模板,其他目标继承这个基础模板,可以提高模板文件的复用性。基础模板使用block定义一个块,这个块可以是被子模板覆盖的。
例如:以下为基础模板
- {# templates/base.volt #}
- <!DOCTYPE html>
- <html>
- <head>
- {% block head %}
- <link rel="stylesheet" href="style.css" />
- {% endblock %}
- <title>{% block title %}{% endblock %} - My Webpage</title>
- </head>
- <body>
- <div id="content">{% block content %}{% endblock %}</div>
- <div id="footer">
- {% block footer %}© Copyright 2012, All rights reserved.{% endblock %}
- </div>
- </body>
- </html>
其他的模板可以继承自这个基础模板,同时替换掉基础模板中的 block:
- {% extends "templates/base.volt" %}
- {% block title %}Index{% endblock %}
- {% block head %}<style type="text/css">.important { color: #336699; }</style>{% endblock %}
- {% block content %}
- <h1>Index</h1>
- <p class="important">Welcome on my awesome homepage.</p>
- {% endblock %}
并非所有的 block 都需要在子模板中进行替换(意思是,你可以替换需要的那一部分)。上面的示例最终输出结果如下:
- <!DOCTYPE html>
- <html>
- <head>
- <style type="text/css">.important { color: #336699; }</style>
- <title>Index - My Webpage</title>
- </head>
- <body>
- <div id="content">
- <h1>Index</h1>
- <p class="important">Welcome on my awesome homepage.</p>
- </div>
- <div id="footer">
- © Copyright 2012, All rights reserved.
- </div>
- </body>
- </html>
作为一个片断,”extends” 后跟的路径是一个相对于视图存放目录的相对路径(即 app/views).
/*默认情况下,出于对性能的考虑,Volt只检查子模板是否有修改。因为建议在开发阶段初始时使用 ‘compileAlways’ => true。这样的话,模板始终检查父模板是否有修改。*/
14、配置
Volt是可以通过配置改变默认的行为的
- <?php
- //Register Volt as a service
- $di->set('voltService', function($view, $di) {
- $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di);
- $volt->setOptions(array(
- "compiledPath" => "../app/compiled-templates/",
- "compiledExtension" => ".compiled"
- ));
- return $volt;
- });
- //Register Volt as template engine
- $di->set('view', function() {
- $view = new \Phalcon\Mvc\View();
- $view->setViewsDir('../app/views/');
- $view->registerEngines(array(
- ".volt" => 'voltService'
- ));
- return $view;
- });
如果不重用Volt,你可以不把它作为一个服务,而是在注册view服务的时候,用匿名函数的方式注册Volt模板引擎
- <?php
- //Register Volt as template engine with an anonymous function
- $di->set('view', function() {
- $view = new \Phalcon\Mvc\View();
- $view->setViewsDir('../app/views/');
- $view->registerEngines(array(
- ".volt" => function($view, $di) {
- $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di);
- //set some options here
- return $volt;
- }
- ));
- return $view;
- });
phalcon框架与Volt 模块引擎 使用简介的更多相关文章
- Volt 模块引擎与phalcon框架组合使用指南
---- 近期工作中web页面使用由C语言编写的VOLT模板引擎,相比之前由js动态加载页面速度更快,更利于百度数据的抓取,现根据文档整理一下使用思路 (Volt是一个超快速和设计者友好的模板语言,C ...
- php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中
php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中 1.phalcon框架的安装: phalcon框架在windows本地安装可以利用wamp软件,安装之后可以查看对应 ...
- 使用Phalcon框架开发一个简易的博客系统
使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...
- 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- 第二百六十七节,Tornado框架-分页封装模块
Tornado框架-分页封装模块 框架引擎 #!/usr/bin/env python #coding:utf-8 import tornado.ioloop import tornado.web # ...
- Spring框架学习(1)Spring简介
内容源自:Spring 框架简介 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序 ...
- 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据
springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据 表单html: <form class="form-horizontal ...
- Phalcon如何创建多模块并能进行访问 《Phalcon入坑指南系列 四》
本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能<Phalcon入坑指南系列 二> 三.Phalc ...
随机推荐
- cf1043E. Mysterious Crime(二分 前缀和)
题意 题目链接 Sol 考场上做完前四题的时候大概还剩半个小时吧,那时候已经困的不行了. 看了看E发现好像很可做?? 又仔细看了几眼发现这不是sb题么... 先考虑两个人,假设贡献分别为\((x, y ...
- 关于background定位
直到刚刚我才发现我小瞧了background定位 因为项目里需要显示隐藏的按钮上有两个图标 开始想了几种方法都不行,然后突然就想到了background定位 果断试了一下 <input type ...
- springmvc封装list个数限制问题
提交一颗树,三级区域个数大于1000个导致提交失败!!! org.springframework.beans.InvalidPropertyException: Invalid property 'd ...
- Generic/Template Programming in Flink
Generic/Template Programming in Flink SourceFunction<T> @Public public interface SourceFunctio ...
- daemontools检测进程,退出拉起
一.学习的原因: 为了实现在服务异常停止运行后,有一个监控程序能监控到它,并自动重新启动这个服务.以下以tomcat为例子 二.工具supervise Daemontools是一个包含了很多管理Uni ...
- 个人发现的createProcess调用漏洞
现在的杀毒软件都会杀掉c盘下的program.exe程序,所以某种意义上而言,这个漏洞算不上“漏洞”. 问题描述 眼睛护士版本:3.0.18.301存在createProcess调用漏洞. 详细说明 ...
- Data truncation: Out of range value for column 'id' at row 1 ### The
org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: com.mys ...
- Java基础之final和static关键字
一.final 根据程序上下文环境,它可以修饰非抽象类.非抽象类成员方法和变量. final类不能被继承,没有子类,final类中的方法默认是final的. ...
- java线程方法join的总结
虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...
- 【Leetcode】【Easy】Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...