———— 近期工作中web页面使用由C语言编写的Volt模板引擎,相比之前由js动态加载页面速度更快,更利于百度数据的抓取,现根据文档整理一下使用思路

Volt是一个超快速和设计者友好的模板语言,C语言编写的PHP。它为您提供了一套 助理写一个简单的方法的意见。phalcon框架与其他组件的高度集成, 就像你可以使用它作为一个独立的组件在你的应用程序中。

Volt是一种用C语言编写的超快速并且设计友好的PHP模板引擎,它为你提供了一套很方便的视图助手。Volt与其他的组件高度集成,就像你可以在应用程序中单独使用它一样

1、激活

把Volt 注册到视图组件,并设置一个扩展名称或者使用默认的扩展名 .phtml :

  1. <?php
  2.  
  3. //Registering Volt as template engine
  4. $di->set('view', function() {
  5.  
  6. $view = new \Phalcon\Mvc\View();
  7.  
  8. $view->setViewsDir('../app/views/');
  9.  
  10. $view->registerEngines(array(
  11. ".volt" => 'Phalcon\Mvc\View\Engine\Volt'
  12. ));
  13.  
  14. return $view;
  15. });
  1. <?php
  2.  
  3. $view->registerEngines(array(
  4. ".phtml" => 'Phalcon\Mvc\View\Engine\Volt'
  5. ));

2、基本使用方法

  Volt的代码是由PHP和HTML构成,Volt中有一组特殊的分隔符,{% ... %}用于执行循环语句和条件判断等,{{ ... }}用于赋值。

  可以使用Phalcon\Mvc\View::setVar把控制器中的变量传递到视图中。

  1. <?php
  2.  
  3. class PostsController extends \Phalcon\Mvc\Controller
  4. {
  5.  
  6. public function showAction()
  7. {
  8.  
  9. $post = Post::findFirst();
  10.  
  11. $this->view->setVar("title", $post->title);
  12. $this->view->setVar("post", $post);
  13. $this->view->setVar("menu", Menu::find());
  14. $this->view->setVar("show_navigation", true);
  15.  
  16. }
  17.  
  18. }

  在上面的例子中,有三个变量传递到视图中:title, menu 和 post :

3、变量

  变量可以有属性,可以通过使用语法访问他们:如:foo.bar。如果他们是数组,你可以使用foo['bar'] 的方式访问

  1. {{ post.title }}
  2. {{ post['title'] }}

4、过滤器

  变量可以使用过滤器格式化或修改,管道操作符“|”用于接收过滤器过滤变量

  1. {{ post.title|e }}
  2. {{ post.content|striptags }}
  3. {{ name|capitalize|trim }}

5、注释

   注释使用{# ... #}分隔符添加注释

6、逻辑语法

  1、for循环

  1. <h1>Robots</h1>
  2. {% for robot in robots %}
  3. {% for part in robot.parts %}
  4. Robot: {{ robot.name|e }} Part: {{ part.name|e }} <br/>
  5. {% endfor %}
  6. {% endfor %}

  2、if判断

    

  1. <h1>Robots</h1>
  2. <ul>
  3. {% for robot in robots %}
  4. {% if robot.type = "cyborg" %}
  5. <li>{{ robot.name|e }}</li>
  6. {% else %}
  7. <li>{{ robot.name|e }} (not a cyborg)</li>
  8. {% endif %}
  9. {% endfor %}
  10. </ul>

7、赋值

  可以使用“set”设置或改变变量的值

  1. {% set fruits = ['Apple', 'Banana', 'Orange'] %}
  2. {% set name = robot.name %}

8、数学计算

  可以使用操作符 + - * % /

9、比较运算符

  ==  != <> > < <= >= === !==

10、逻辑运算符

  or   and   not

11、其他操作符

  ~      |      ..      is      is not

  1. {% set robots = ['Voltron', 'Astro Boy', 'Terminator', 'C3PO'] %}
  2.  
  3. {% for index in 0..robots|length %}
  4. {% if isset robots[index] %}
  5. {{ "Name: " ~ robots[index] }}
  6. {% endif %}
  7. {% endfor %}

12、视图集成

  Volt 模板集成了 Phalcon\Mvc\View, 你的模板层次结构和默认的层次结构一样,你可以这样使用 partials :

  1. {{ content() }}
  2.  
  3. {{ partial("partials/footer.volt") }}

13、模板继承

  你可以创建一个基础模板,其他目标继承这个基础模板,可以提高模板文件的复用性。基础模板使用block定义一个块,这个块可以是被子模板覆盖的。

  例如:以下为基础模板

  1. {# templates/base.volt #}
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. {% block head %}
  6. <link rel="stylesheet" href="style.css" />
  7. {% endblock %}
  8. <title>{% block title %}{% endblock %} - My Webpage</title>
  9. </head>
  10. <body>
  11. <div id="content">{% block content %}{% endblock %}</div>
  12. <div id="footer">
  13. {% block footer %}© Copyright 2012, All rights reserved.{% endblock %}
  14. </div>
  15. </body>
  16. </html>

  其他的模板可以继承自这个基础模板,同时替换掉基础模板中的 block:

  1. {% extends "templates/base.volt" %}
  2.  
  3. {% block title %}Index{% endblock %}
  4.  
  5. {% block head %}<style type="text/css">.important { color: #336699; }</style>{% endblock %}
  6.  
  7. {% block content %}
  8. <h1>Index</h1>
  9. <p class="important">Welcome on my awesome homepage.</p>
  10. {% endblock %}

  并非所有的 block 都需要在子模板中进行替换(意思是,你可以替换需要的那一部分)。上面的示例最终输出结果如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style type="text/css">.important { color: #336699; }</style>
  5. <title>Index - My Webpage</title>
  6. </head>
  7. <body>
  8. <div id="content">
  9. <h1>Index</h1>
  10. <p class="important">Welcome on my awesome homepage.</p>
  11. </div>
  12. <div id="footer">
  13. © Copyright 2012, All rights reserved.
  14. </div>
  15. </body>
  16. </html>

  作为一个片断,”extends” 后跟的路径是一个相对于视图存放目录的相对路径(即 app/views).

  /*默认情况下,出于对性能的考虑,Volt只检查子模板是否有修改。因为建议在开发阶段初始时使用 ‘compileAlways’ => true。这样的话,模板始终检查父模板是否有修改。*/

14、配置

  Volt是可以通过配置改变默认的行为的

  

  1. <?php
  2.  
  3. //Register Volt as a service
  4. $di->set('voltService', function($view, $di) {
  5.  
  6. $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di);
  7.  
  8. $volt->setOptions(array(
  9. "compiledPath" => "../app/compiled-templates/",
  10. "compiledExtension" => ".compiled"
  11. ));
  12.  
  13. return $volt;
  14. });
  15.  
  16. //Register Volt as template engine
  17. $di->set('view', function() {
  18.  
  19. $view = new \Phalcon\Mvc\View();
  20.  
  21. $view->setViewsDir('../app/views/');
  22.  
  23. $view->registerEngines(array(
  24. ".volt" => 'voltService'
  25. ));
  26.  
  27. return $view;
  28. });

  如果不重用Volt,你可以不把它作为一个服务,而是在注册view服务的时候,用匿名函数的方式注册Volt模板引擎

  1. <?php
  2.  
  3. //Register Volt as template engine with an anonymous function
  4. $di->set('view', function() {
  5.  
  6. $view = new \Phalcon\Mvc\View();
  7.  
  8. $view->setViewsDir('../app/views/');
  9.  
  10. $view->registerEngines(array(
  11. ".volt" => function($view, $di) {
  12. $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di);
  13.  
  14. //set some options here
  15.  
  16. return $volt;
  17. }
  18. ));
  19.  
  20. return $view;
  21. });

Volt 模块引擎与phalcon框架组合使用指南的更多相关文章

  1. phalcon框架与Volt 模块引擎 使用简介

      ———— 近期工作中web页面使用由C语言编写的Volt模板引擎,相比之前由js动态加载页面速度更快,更利于百度数据的抓取,现根据文档整理一下使用思路 (Volt是一个超快速和设计者友好的模板语言 ...

  2. php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中

    php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中 1.phalcon框架的安装: phalcon框架在windows本地安装可以利用wamp软件,安装之后可以查看对应 ...

  3. 使用Phalcon框架开发一个简易的博客系统

    使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...

  4. 第三十篇:SOUI模块结构图及SOUI框架图

    模块结构图: SOUI框架图:

  5. wampserver2.5安装 redis缓存,igbinary, phalcon框架

    wampserver2.5安装 redis缓存,igbinary, phalcon框架 根据phalconphp说明文件,先将dll文件拖入到:安装盘:\wamp\bin\php\php5.5.12\ ...

  6. phalcon框架学习之view

    phalcon框架的view分多级:全局-控制器视图-动作视图.视图由上到下,按层级嵌套. 全局视图 默认全局视图为Views/index.html,所有的页面展示时,默认调用此页面,在这个页面中必须 ...

  7. Python操作Excel——win32com模块和xlrd+xlwt+xlutils组合

    今天,接到一个任务,要生成大约两百个excel文件,从2006年到2013年,每个月两个文件,这些文件中除了几个关于日期的单元格不同外,其他数据都相同,所以就想到可以用python写一个小脚本,自动生 ...

  8. 安卓图表引擎AChartEngine(六) - 框架源码结构图

    包结构: org.achartengine: org.achartengine.model: org.achartengine.renderer: org.achartengine.tools: 安卓 ...

  9. express依赖中模块引擎的使用

    express中模块引擎的切换 4.x 示例: 如果要将默认的模块引擎切换至指定的模块引擎,用layout render.get('/',function(req,res,next){ res.ren ...

随机推荐

  1. FFT 的C 语言

    FFT 的C 语言 说好的C 语言实现.必须搞定它! 理论介绍: http://blog.csdn.net/cinmyheart/article/details/39052739 这里有之前matla ...

  2. DDD分层架构之我见

    DDD分层架构之我见 前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定 ...

  3. sugarcrm关于邮件设置几个不好理解的地方

    陈沙克日志 把我的过程记录下来,以免以后忘了     2008-06-11 12:32 sugarcrm关于邮件设置几个不好理解的地方 最近看sugarcrm的使用,别的基本使用,没有什么问题,几天就 ...

  4. Visual Studio 2013 的 Browser Link 功能

    Visual Studio 2013 的 Browser Link 功能 最近公司弄新项目需要用 MVC,就把 IDE 升级到了 Visual Studio 2013,在开发的时候发现有好多请求一个本 ...

  5. 对Extjs中store的多种操作

    Store.getCount()返回的是store中的所有数据记录,然后使用for循环遍历整个store,从而得到每条记录. 除了使用getCount()的方法外,还可以使用each()函数,如下面的 ...

  6. GridView动态增加行

    GridView动态增加行GridView动态增加行 很多时候,我们需要可编辑的表格,来比较方便的进行数据的录入,比如学习成绩的录入.当然这就要求能够动态的增加行,来一次性录入多个学生的信息.现在用A ...

  7. HttpTest4Net

    HttpTest4Net HttpTest4Net是一款基于C#实现的和HTTP压力测试工具,通过工具可以简单地对HTTP服务进行一个压力测试.虽然VS.NET也集成了压力测试项目,但由于VS自身占用 ...

  8. NET实现仓库看板的一些感想

    NET实现仓库看板的一些感想 从一名技术开发人员到实施人员的蜕变,从不同的角度看待同一个问题,或许会有不一样的结果.这里记录一下最近一个项目实施的案例,非常有感触! 一. 项目情况简介 本次项目是给一 ...

  9. IP数据报是如何在网络中转发的?

    首先发送方抽取目的站的网络前缀,来判断是否目的站是否位于同一网络上,如果在二者有相同的网络前缀,则,直接使用直接交付的方式, 否则,使用由路由器互连的间接交付,这要借助IP路由表,采用表驱动法,路由表 ...

  10. U盘安装Win7

    声明:本方法仅仅适用于windows 7 的安装. 工具准备: 1.网上下载一个windows 7 系统.最好是纯净版的,非Gost 版.虽然装机慢了一些,但到用时就体会到他的流畅. 2.Window ...