Volt 模块引擎与phalcon框架组合使用指南

2017-01-12 09:57:51来源:作者:Alily人点击

    ———— 近期工作中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 PhalconMvcView();
$view->setViewsDir('../app/views/');
$view->registerEngines(array(
".volt" => 'PhalconMvcViewEngineVolt'
));
return $view;
});
<?php
$view->registerEngines(array(
".phtml" => 'PhalconMvcViewEngineVolt'
)); 2、基本使用方法

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


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


<?php
class PostsController extends PhalconMvcController
{
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循环

Robots


{% for robot in robots %}
{% for part in robot.parts %}
Robot: {{ robot.name|e }} Part: {{ part.name|e }}

{% endfor %}
{% endfor %}   2、if判断

    


Robots



    {% for robot in robots %}
    {% if robot.type = "cyborg" %}
  • {{ robot.name|e }}

  • {% else %}
  • {{ robot.name|e }} (not a cyborg)

  • {% endif %}
    {% endfor %}
 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 模板集成了 PhalconMvcView, 你的模板层次结构和默认的层次结构一样,你可以这样使用 partials :


{{ content() }}
{{ partial("partials/footer.volt") }} 13、模板继承

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


  例如:以下为基础模板


{# templates/base.volt #}



{% block head %}

{% endblock %}
{% block title %}{% endblock %} - My Webpage


{% block content %}{% endblock %}


{% block footer %}© Copyright 2012, All rights reserved.{% endblock %}


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


{% extends "templates/base.volt" %}
{% block title %}Index{% endblock %}
{% block head %}{% endblock %}
{% block content %}

Index


Welcome on my awesome homepage.


{% endblock %}

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






Index - My Webpage



Index


Welcome on my awesome homepage.




© Copyright 2012, All rights reserved.


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


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


14、配置

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


  


<?php
//Register Volt as a service
$di->set('voltService', function($view, $di) {
$volt = new PhalconMvcViewEngineVolt($view, $di);
$volt->setOptions(array(
"compiledPath" => "../app/compiled-templates/",
"compiledExtension" => ".compiled"
));
return $volt;
});
//Register Volt as template engine
$di->set('view', function() {
$view = new PhalconMvcView();
$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 PhalconMvcView();
$view->setViewsDir('../app/views/');
$view->registerEngines(array(
".volt" => function($view, $di) {
$volt = new PhalconMvcViewEngineVolt($view, $di);
//set some options here
return $volt;
}
));
return $view;
});

 


 

内容来源:http://www.cnblogs.com/nana-share/p/6268847.html

相关文章

    无相关信息

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台