F3-fatfree小型php框架教程(五)

看到這裏我想再寫一個helloworld的程序,不過此次的程序須要調用htm來實現,首先咱們知道fatfree主要是以php爲引擎的,咱們定義一個template.htm文件:php

<p>Hello, <?php echo $name; ?>!</p>
注意,這裏的name是還沒初始化的變量

而後在主函數裏面:html

$f3=require('lib/base.php');$f3->route('GET /',
    function($f3) {
        $f3->set('name','world');
        $view=new View;
        echo $view->render('template.htm');
        // Previous two lines can be shortened to:        // echo View::instance()->render('template.htm');    });$f3->run();

這裏面的view是內置對象,用於調用htm文件,而後這裏給name初始化了而後調用template,輸出helloworld,應該沒什麼問題。web


這裏也有另一種fatfree自己的模板,格式是:數組

<p>Hello, {{ @name }}!</p>
$f3=require('lib/base.php');$f3->route('GET /',
    function($f3) {
        $f3->set('name','world');
        $template=new Template;
        echo $template->render('template.htm');
        // Above lines can be written as:        // echo Template::instance()->render('template.htm');    });$f3->run();
變更就是new的類不一樣和文件中變量的引用不一樣。

能夠發現fatfree的變量都是以@符號開頭的,並且框架會自動產生跟跟文件名同樣的類,在這裏是template,也就是文件的名字。app

再舉個例子,若是你定義了:框架

$f3->set('buddy',array('Tom','Dick','Harry'));

而後再在template裏面寫下:函數

<p>{{ @buddy[0] }}, {{ @buddy[1] }}, and {{ @buddy[2] }}</p>
就能夠輸出buddy的數組元素了,可是若是你只在文件裏寫   {{ @buddy }} 的話,那麼由於傳輸進來的是一個數組,因此輸出的是‘Array’這個字符串。

文件裏面的調用還支持一系列的操做:ui

{{ 2*(@page-1) }}
{{ (int)765.29+1.2e3 }}<option value="F" {{ @active?'selected="selected"':'' }}>Female</option>{{ var_dump(@xyz) }}<p>That is {{ preg_match('/Yes/i',@response)?'correct':'wrong' }}!</p>{{ @obj->property }}
只要你源文件裏面給這些變量定義徹底了,這些操做都是有效的。

還有fatfree裏面給函數定義是這樣的:編碼

$f3->set('func',
    function($a,$b) {
        return $a.', '.$b;
    });
定義完以後就能夠調用了:

{{ @func('hello','world') }}

還有一招在文件裏面調用另一個文件:spa

<include href="header.htm" />
若是你怕麻煩也能夠用變量的形式調用,首先:

// switch content to your blog sub-template$f3->set('content','blog.htm');// in another route, switch content to the wiki sub-template$f3->set('content','wiki.htm');
而後:

<include href="{{ @content }}" />
並且這個include還能夠設置爲有條件限制的:

<include if="{{ count(@items) >= 2 }}" href="items.htm" />
這裏的count是計算@items數組的元素,這裏就不詳細說了。



註釋:

<exclude>
    <p>A chunk of HTML we don't want displayed at the moment</p></exclude>
還有

{* <p>A chunk of HTML we don't want displayed at the moment</p> *}
都是fatfree裏面的註釋。


條件語句:

<check if="{{ @page=='Home' }}">
    <false><span>Inserted if condition is false</span></false></check><check if="{{ @gender=='M' }}">
    <true>
        <div>Appears when condition is true</div>
    </true>
    <false>
        <div>Appears when condition is false</div>
    </false></check>
跟ifelse同樣,這裏就不說了,可是若是不寫false那就所有默認爲true:

<check if="{{ @loggedin }}">
    <p>HTML chunk to be included if condition is true</p></check>


而後說一個數組輸出的方法:

首先定義:

$f3->set('fruits',array('apple','orange ',' banana'));
而後文件中

<repeat group="{{ @fruits }}" value="{{ @ifruit }}">
    <p>{{ trim(@ifruit) }}</p></repeat>
這樣就能夠出來效果:

<p>apple</p><p>orange</p><p>banana</p>

而後咱們來個複雜的例子:

定義:

$f3->set('div',
    array(
        'coffee'=>array('arabica','barako','liberica','kopiluwak'),
        'tea'=>array('darjeeling','pekoe','samovar')
    ));
而後文件中:

<repeat group="{{ @div }}" key="{{ @ikey }}" value="{{ @idiv }}">
    <div>
        <p><span><b>{{ @ikey }}</b></span></p>
        <p>
        <repeat group="{{ @idiv }}" value="{{ @ispan }}">
            <span>{{ @ispan }}</span>
        </repeat>
        </p>
    </div></repeat>
輸出:

<div>
    <p><span><b>coffee</b></span></p>
    <p>
        <span>arabica</span>
        <span>barako</span>
        <span>liberica</span>
        <span>kopiluwak</span>
    <p></div><div>
    <p><span><b>tea</b></span></p>
    <p>
        <span>darjeeling</span>
        <span>pekoe</span>
        <span>samovar</span>
    </p></div>
如今發現挺好用了吧,而後要說明一下,key對應的值是數組當前指針(多維才適用),value對應的值是數組的值,會根據要求羅列出來。並且若是定義的數組是多維的,例如上面那個div -> coffee -> arabica這個二維數組,repeat也要調用兩次,第一次的repeat是進入coffee的第一層,而後第二次調用進入arabica這一層,key對應的就是當時的指針。


固然也能夠像以前那樣判斷類別:

<repeat group="{{ @fruits }}" value="{{ @fruit }}" counter="{{ @ctr }}">
    <p class="{{ @ctr%2?'odd':'even' }}">{{ trim(@fruit) }}</p></repeat>
若是ctr是奇數就進odd類,若是是偶數就是even類


字符編碼:

UTF-8:

$f3->set('ENCODING','ISO-8859-1');

email模板:

首先下面先說一下email的邏輯定義:

welcome.txt文件裏面是這樣的

MIME-Version: 1.0
Content-type: text/html; charset={{ @ENCODING }}
From: {{ @from }}
To: {{ @to }}
Subject: {{ @subject }}<p>Welcome, and thanks for joining {{ @site }}!</p>
咱們的定義:

$f3->set('from','<no-reply@mysite.com>');$f3->set('to','<slasher@throats.com>');$f3->set('subject','Welcome');ini_set('sendmail_from',$f3->get('from'));mail(
    $f3->get('to'),
    $f3->get('subject'),
    Template::instance()->render('email.txt','text/html'));
這裏有兩個比較陌生的php函數,ini_php函數是用來修改php.ini基本配置文件的函數,可是會在腳本運行結束後恢復。而mail函數是php內置的核心函數,不須要額外安裝,也就是發email的,這裏是簡單的使用模式,分別是接收者,主題,內容。可是要注意,發送成功不表示對方必定會接收到。


固然,上面這個代碼只是給單一用戶發送郵件的代碼,可是咱們常常要給一系列的用戶發送郵件。因此就不能用這種簡單的代碼了。

咱們能夠用smtp的類來發送:教程

$mail=new SMTP('smtp.gmail.com',465,'SSL','account@gmail.com','secret');
$mail->set('from','<no-reply@mysite.com>');
$mail->set('to','"Slasher" <slasher@throats.com>');
$mail->set('subject','Welcome');
$mail->send(Template::instance()->render('email.txt'));
相關文章
相關標籤/搜索