看到这里我想再写一个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的类不同和文件中变量的引用不同。[email protected],而且框架会自动产生跟跟文件名一样的类,在这里是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') }}
还有一招在文件里面调用另外一个文件:
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');
然后: href="{{ @content }}" />
而且这个include还可以设置为有条件限制的: if="{{ count(@items) >= 2 }}" href="items.htm" />
[email protected],这里就不详细说了。注释:
> >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里面的注释。条件语句:
if="{{ @page=='Home' }}"> >>Inserted if condition is false> > > if="{{ @gender=='M' }}"> > >Appears when condition is true> > > >Appears when condition is false> > >
跟ifelse一样,这里就不说了,但是如果不写false那就全部默认为true: if="{{ @loggedin }}"> >HTML chunk to be included if condition is true
> >
然后说一个数组输出的方法:
首先定义:
$f3->set('fruits',array('apple','orange ',' banana'));
然后文件中 group="{{ @fruits }}" value="{{ @ifruit }}"> >{{ trim(@ifruit) }}
> >
这样就可以出来效果:>apple
>>orange
>>banana
>
然后我们来个复杂的例子:
定义:
$f3->set('div', array( 'coffee'=>array('arabica','barako','liberica','kopiluwak'), 'tea'=>array('darjeeling','pekoe','samovar') ));
然后文件中: group="{{ @div }}" key="{{ @ikey }}" value="{{ @idiv }}"> > >>>{{ @ikey }}>>
> > group="{{ @idiv }}" value="{{ @ispan }}"> >{{ @ispan }}> >
> > >
输出:> >>>coffee>>
> > >arabica> >barako> >liberica> >kopiluwak> >
>> >>>tea>>
> > >darjeeling> >pekoe> >samovar>
>>
现在发现挺好用了吧,然后要说明一下,key对应的值是数组当前指针(多维才适用),value对应的值是数组的值,会根据要求罗列出来。而且如果定义的数组是多维的,例如上面那个div -> coffee -> arabica这个二维数组,repeat也要调用两次,第一次的repeat是进入coffee的第一层,然后第二次调用进入arabica这一层,key对应的就是当时的指针。当然也可以像之前那样判断类别:
group="{{ @fruits }}" value="{{ @fruit }}" counter="{{ @ctr }}"> class="{{ @ctr%2?'odd':'even' }}">{{ trim(@fruit) }}
> >
如果ctr是奇数就进odd类,如果是偶数就是even类字符编码:
UTF-8:
$f3->set('ENCODING','ISO-8859-1');
email模板:
首先下面先说一下email的逻辑定义:
welcome.txt文件里面是这样的
MIME-Version: 1.0Content-type: text/html; charset={{ @ENCODING }}From: {{ @from }}To: {{ @to }}Subject: {{ @subject }}>Welcome, and thanks for joining {{ @site }}!
>
我们的定义:$f3->set('from','<[email protected]>');$f3->set('to','<[email protected]>');$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','<[email protected]>');$mail->set('to','"Slasher" <[email protected]>');$mail->set('subject','Welcome');$mail->send(Template::instance()->render('email.txt'));
相关文章推荐
• 深入了解PHP反序列化原生类• 带你吃透16个PHP魔术方法• php指定函数参数默认值示例代码_PHP• 深入解读php中关于抽象(abstract)类和抽象方法的问题分析_PHP• 浅析php变量作用域的一些问题_PHP独孤九贱(3)_JavaScript视频教程
javascript是运行在浏览器上的脚本语言,连续多年,被评为全球最受欢迎的编程语言。是前端开发必备三大法器中,最具杀伤力。如果前端开发是降龙十八掌,好么javascript就是第18掌:亢龙有悔。没有它,你的前端生涯是不完整的。《php.cn独孤九贱(3)-JavaScript视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了javascript知识。
JavaScript教程124334次播放
独孤九贱(6)_jQuery视频教程
jQuery是一个快速、简洁的JavaScript框架。设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等,是全球最流行的前端开发框架之一。PHP中文网根据最新版本,独家录制jQuery最新视频教程,回馈PHP中文网的新老用户。
jQuery教程102781次播放
jQuery与Ajax基础与实战
jQuery是最流行的JS函数库,封装了许多实用的功能,其中最引人入胜的就是Ajax。 jQuery中的Ajax操作,语法简单,操作方便,使Ajax从未如此轻松,前端人员从此不再为与服务器异步交互而发愁,本套课程,精选了最常用的几个方法,从基本的语法到每个参数,再到具体实例进行了全面的讲解。
AJAX教程4088次播放
Git教程(60分钟全程无废话版)
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持
JavaScript教程3412次播放