zoukankan      html  css  js  c++  java
  • 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 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循环

    <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 模板集成了 PhalconMvcView, 你的模板层次结构和默认的层次结构一样,你可以这样使用 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 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;
    });
    

     

     

  • 相关阅读:
    调整数组顺序使奇数位于偶数前面
    数值的整数次方
    矩形覆盖
    变态跳台阶
    跳台阶
    ubuntu图形界面切换文字界面(文字界面切换图形界面)
    Django环境安装、虚拟机端口映射、pycharm远程配置
    sql注入(一)-----数字型
    mysql基本语法
    渗透测试之------信息收集
  • 原文地址:https://www.cnblogs.com/nana-share/p/6268847.html
Copyright © 2011-2022 走看看