程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> F3-fatfree小型php框架教程(五)

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

編輯:關於PHP編程

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

Hello, !

注意,這裡的name是還沒初始化的變量

然後在主函數裡面:

$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,應該沒什麼問題。


這裡也有另外一種fatfree本身的模板,格式是:

Hello, {{ @name }}!

$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,也就是文件的名字。

再舉個例子,如果你定義了:

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

然後再在template裡面寫下:

{{ @buddy[0] }}, {{ @buddy[1] }}, and {{ @buddy[2] }}

就可以輸出buddy的數組元素了,但是如果你只在文件裡寫 {{ @buddy }}的話,那麼因為傳輸進來的是一個數組,所以輸出的是‘Array’這個字符串。

文件裡面的調用還支持一系列的操作:

{{ 2*(@page-1) }}
{{ (int)765.29+1.2e3 }}

{{ var_dump(@xyz) }}

That is {{ preg_match('/Yes/i',@response)?'correct':'wrong' }}!

{{ @obj->property }}
只要你源文件裡面給這些變量定義完全了,這些操作都是有效的。

還有fatfree裡面給函數定義是這樣的:

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

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

還有一招在文件裡面調用另外一個文件:

如果你怕麻煩也可以用變量的形式調用,首先:

// 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還可以設置為有條件限制的:

這裡的count是計算@items數組的元素,這裡就不詳細說了。



注釋:


    

A chunk of HTML we don't want displayed at the moment

還有

{* 

A chunk of HTML we don't want displayed at the moment

*}
都是fatfree裡面的注釋。


條件語句:


    Inserted if condition is false


    
        Appears when condition is true
    
    
        Appears when condition is false
    
跟ifelse一樣,這裡就不說了,但是如果不寫false那就全部默認為true:


    

HTML chunk to be included if condition is true



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

首先定義:

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


    

{{ trim(@ifruit) }}

這樣就可以出來效果:

apple

orange

banana


然後我們來個復雜的例子:

定義:

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


    
        

{{ @ikey }}

{{ @ispan }}

輸出:


    

coffee

arabica barako liberica kopiluwak

tea

darjeeling pekoe samovar

現在發現挺好用了吧,然後要說明一下,key對應的值是數組當前指針(多維才適用),value對應的值是數組的值,會根據要求羅列出來。而且如果定義的數組是多維的,例如上面那個div -> coffee -> arabica這個二維數組,repeat也要調用兩次,第一次的repeat是進入coffee的第一層,然後第二次調用進入arabica這一層,key對應的就是當時的指針。


當然也可以像之前那樣判斷類別:


    

{{ trim(@fruit) }}

如果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 }}

Welcome, and thanks for joining {{ @site }}!

我們的定義:

$f3->set('from','');
$f3->set('to','');
$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','[email protected]','secret');
$mail->set('from','');
$mail->set('to','"Slasher" ');
$mail->set('subject','Welcome');
$mail->send(Template::instance()->render('email.txt'));


















  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved