Posts Tagged ‘标签’

PHP.MVC的模板标签系统(三)

星期一, 06月 2nd, 2008

PHP.MVC标签语法

在基本de介绍之后,我现在就可以来看看模板标签系统de语法.
在看具体de标签之前,我应该定义什么作为我de标签.为了写一个标签,我使用<@ … @>标签结点.左标签(<@)和右标签(@>)是默认de标签.如果必要de话,这些标签我能够在phpmvc-config.xml中重新定义.
模板标签系统现在支持以下3种标签:包含指令,声明和表达式.我现在来看看这些指令.

包含指令

包含指令能让我将内容分隔为许多模块,比如:页眉,页脚或者内容.包含de页面可以是HTML,或者其他标签模板页.据个例子,下面de包含指令能用来包含一个页眉:
<@ include ‘pageHeader.ssp’ @>
一个包含指令在模板上下文种de例子:
<html>
<head>

</head>
<body>
<center>
<table class=’pageLayoutTable’>
<tr>
<td class=’pageHeader’>
<@ include ‘pageHeader.ssp’ @>
</td>
</tr>
<!– PAGE CONTENTS –>

<!– PAGE FOOTER –>

</table>

</center>
</body>
</html>
在这里例子种pageHeader.ssp页眉文件内容将被插入到主页面上当这个页面被发送到用户浏览器上.这个页眉文件包含了一个表达式:
<!– Page Header –>
<span>
<@ =viewConfig.getAppTitle @>
</span>
这个表达式将被编译并且将在运行时输出为:
<!– Page Header –>
<span>
Flash Jacks’ Sleek Tab Site
</span>

声明

声明允许我在模板种声明一个页面级别de变量,或者甚至其他包含页面.一个声明看起来像以下相关代码:
<@ salesAreaID = “Central District” @>
我能够在模板文件中使用声明:
<@ saleMonth = data.getValueBean(’SALE_MONTH’) @>
<@ saleTitle = data.getValueBean(’SALE_TITLE’) @>
<@ dealHeading = data.getValueBean(’DEAL_HEADING’) @>
<@ salesAreaID = “Central District” @>

<html>
<head>
<link rel=’stylesheet’ type=’text/CSS‘ href=”./style/pageStyles.css”/>
<title>

</title>
</head>
<body>

</body>
</html>
在这里例子中,我声明了一些页变量.前3个变量已经在我创建deAction类中deActionObject中被赋值:data.getValueBean(’SALE_MONTH’).第4个变量被赋了一个字符串值:salesAreaID = “Central District”.
声明de变量现在可以在页面中使用了:
<!– start_page_contents_include –>

<!– Content section heading –>
<h4><@=dealHeading @> <@=saleMonth @></h4>

<center>
Clearance deals
<table class=’productsTable’>

</table>
</center>

<center>
Todays specials
<table class=’productsTable’>

</table>
</center>

<!– end_page_contents_include –>
这些页变量将被输出为:
<!– Content section heading –>
<h4>Jack’s Super Deals for : May 2010</h4>

表达式

表达式标签允许我在模板页中执行表达式.表达式de结果将被包含进模板页.以下表达式将被用来显示一个简单de字符串(salesAreaID),也可以找回框架配置类de属性:
<@ =salesAreaID @>
<@ =viewConfig.contactInfo @>
为了使用这些表达式,我要在之前声明过:
<@ salesAreaID = “Central District” @>
或者在ViewResourcesConfig对象(viewConfig)de属性在view-resources结点中声明过:
<view-resources
appTitle = “Flash Jacks’ Sleek Tab Site”
contactInfo = “flash.jack@jackshost.com

</view-resources>
当使用表达式中de对象时,我能够写一个对象-方法(object-method)声明在标准dePHP符号或者点风格de符号:
The PhpMVC_Tags Object-Method Notation
PHP Style sales = data->getSales
Dot Style sales = data.getSales
With Method Params staff = data.getValueBean(”STAFF”)
Retrieve Data Array products = data->getValueBean(”PRODUCTS_ARRAY”)
在下一个单元我将看到如何使用模板标签系统将这些结合在一起来构建页面.

PHP.MVC的模板标签系统(二)

星期一, 06月 2nd, 2008

The Php.MVC Tag Action Dispatcher

TagActionDispatcher是一个标准deActionDispatcher类de实现,它支持访问基本模板标签.TagActionDispatcher类支持相同deActionObjects集合和ViewResourcesConfig属性作为默认deActionDispatcher.TagActionDispatcher类能被用在带有或没有带有模板标签系统上,尽管由于它de额外处理会造成小de性能下降.
模板标签库是PHP.MVC框架结构de子系统.模板标签库联合TagActionDispatcher一起工作来支持一些简单de模板标签.
下面de图表显示了PHP.MVC模板标签系统de总揽.左边展示de是模板标签系统de程序流程.右边是TagActionDispatcherde程序流程,还有标签模板是怎样使这些类进行交互.

模板标签系统de程序流程

1.初始化
当控制器传递控制到达TagActionDispatcher,一些初始化触发去设置ActionObjects和ViewResourcesConfig属性为了使用我de模板:
从request中重新获得$form,$errors和$data对象,如果这些对象中de任意一个已经在之前被创建(比如在Action类中),那么对象现在将在资源模板中不可见,否则对象将被设置为NULL.
重新获得ViewResourcesConfig对象de参考,它包含了配置参数.
设置在ViewResourcesConfig参数中指向模板源文件和编译de模板文件de路径.
2.设置标签页面
模板源文件de扩展名(可能是”.ssp”)被用来和ViewResourcesConfig->tagFlagStr参数相比较来决定是否这个页面需要处理,否则页面将被处理为标准(无标签)模板文件.我能在view-resources元素中配置标签文件扩展名,就像这样:
<view-resources

tagFlagStr = “.ssp”
tagFlagCnt = “-4″

</view-resources>
tagFlagStr指示了标签模板源文件能被预处理,比如:myPage.ssp.这个扩展名触发标签处理.属性tagFlagCnt定义了文件名结尾de字符数,包括”.”(xxxYyy.ssp).据个例子,-4代表源文件名最后4个字符.默认值是.ssp和-4,因此如果我使用一个模板文件名像myPage.ssp,我不需要设置这些参数.
3.处理标签文件
模板标签系统决定是否运行标签处理器,要根据ViewResourcesConfig->processTags属性.如果这个属性为真,模板页(及它所包含de页)将被标签处理器类所处理,否则标签处理器不会被调用.开发者只要将它在开发中将其设置为真即可,假则不处理.但要注意de是当processTags属性设置为真,修改过de标签页才会被编译(这依赖于compileAll属性设置).我能定义processTags属性在view-resources元素,就像这样:
<view-resources

processTags = “True”

</view-resources>
注意,它de默认值是假.
4.编译模板页.
如果TagActionDispatcher决定模板页将被处理,那么它会传递控制给模板标签系统.现在模板标签系统将决定是否只编译修改过de页,还是编译所有页.这种行为使用ViewResourcesConfig->compileAll属性来定义.我定义compileAll属性就像这样:
<view-resources

compileAll = “True”

</view-resources>
这个属性默认为假.
5.只编译修改de页.
如果compileAll属性设置为假(默认值),那么只会编译修改过de页.据个例子,如果被请求de页面自从上次被请求以来被修改过,此页将会被编译.
6.编译所有de页.
如果compileAll属性设置为真,模板标签系统将总是编译页面(包括包含de页面)无论此页面自从上次请求以来是否修改过.开发者使用在开发中使用这个选项能够保证所有de页面都被处理.
7.处理VIEW资源.
在处理完模板页之后,控制权回到TagActionDispatcher.被请求deVIEW资源(模板文件)将被任何其他de正规PHP.MVC模板文件所处理.TagActionDispatcher重新获得被编译de页(包括包含de页面)并且将页面输出给用户de浏览器.如果模板标签系统没有被调用,TagActionDispatcher将被请求de页面作为正规deVIEW资源来处理.比如TagActionDispatcher能被用来代替标准deActionDispatcher.

PHP.MVC的模板标签系统(一)

星期一, 06月 2nd, 2008

PHP.MVCde模板标签系统(PhpMVC_Tags)现在提供了3种类型de标签:包含指令,声明和表达式.
包含指令能让我将内容分隔为许多模块,比如:页眉,页脚或者内容.包含de页面可以是HTML,或者其他标签模板页.据个例子,下面de包含指令能用来包含一个页眉:
<@ include ‘pageHeader.ssp’ @>
声明允许我在模板种声明一个页面级别de变量,或者甚至其他包含页面.一个声明看起来像以下相关代码:
<@ salesAreaID = “Central District” @>
表达式标签允许我在模板页中执行表达式.表达式de结果将被包含进模板页.以下表达式将被用来显示一个简单de字符串(salesAreaID),也可以找回框架配置类de属性:
<@ =salesAreaID @>
<@ =viewConfig.getAreaManager @>
PHP.MVC beta 0.4.0引进了一个新配置类叫做ViewResourcesConfig.这个类能被用来定义能被用在VIEW资源(模板)中de全局参数,并且也能去配置模板标签系统,它将在下面显示.phpmvc-config.xml配置文件中deview-resources元素在下面de显示:
<view-resources
appTitle = “Flash Jacks’ Sleek Tab Site”
copyright = “Copyright @ 2010 Flash Jack. All rights reserved.”
contactInfo = “flash.jack@jackshost.com
processTags = “true”
compileAll = “true”
className = “MyViewResourcesConfig”>

<!– We can set some properties on our custom ViewResourcesConfig class –>
<set-property property=”areaManager” value=”Joe J. Blogs Esq.”/>
</view-resources>
模板页面处理使用模板标签系统能被<view-resources>结点来控制.首先我能定义是模板标签系统编译所有模板页面还是只编译修改过de.其次,我能定义模板标签系统是否真de要处理标签页面,处理标签页面在应用程序配置当中和配置之后很有用.下面单元显示de<view-resources>是将compileAll和processTags属性设置为真(总是处理标签页并且处理所有标签页):
<view-resources

processTags = “true”
compileAll = “true”

</view-resources>
Action Dispatcher

PHP.MVC版本beta 0.4.0以上ActionDispatcher类用来负责使FormBean,Errors,Value(商务数据)和ViewResourcesConfig对象在我deVIEW(模板)中可以使用.
在检查模板标签系统之前我应该快速de看一下ActionObjects和ViewResourcesConfig类,当在使用标准deActionDispatcher时.

ActionObjects

ActionDispatcher使一些对象在我所使用de模板页面中de应用程序VIEW资源可用.3种标准deActionObjects为:FormBean,Errors,和Value(商务数据)对象.
一下表格显示了在FormAction和Action类中如何使用FormBean,Errors和Value对象:
Saving ActionObjects in ActionForm Classes
ActionErrors $this->saveErrors($request, $actionErrors)
FormBeans $this->saveFormBean($request, $this)
ValueObjects $this->saveValueObject($request, $valueObject)

Saving ActionObjects in Action Classes
ActionErrors $this->saveErrors($request, $actionErrors)
FormBeans $this->saveFormBean($request, $form)
ValueObjects $this->saveValueObject($request, $valueObject)

Retrieving ActionObjects in View Resources (Templates)
ActionErrors $errors->getItemString(’logon_username_reqd’)
FormBeans $form->username
ValueObjects $data->salesNorth

一个ActionObject将被初始化为NULL如果对象没有在之前被创建和保存.要想得到ActionObjectsde详细信息请看这里:http://www.phpmvc.net/docs/guides/guidesIdx.php?doc=action-objects

View Resources

ActionDispatcher也能暴露ViewResourcesConfig对象到我de模板页面中.ViewResourcesConfig对象被phpmvc-config.xml配置文件中de<view-resources>元素所配置de.如果ViewResourcesConfig对象还没有被配置,那么一个新de实例将使用默认deViewResourcesConfig类de属性.
下面这段相关代码显示了使用模板标签系统de表达式在我deHTML页眉模板中如何访问ViewResourcesConfig属性:
<!– Page Header –>
<span>
<@ =viewConfig.getAppTitle @>
</span>

配置Action Dispatcher

ActionDispatcher是默认dePHP.MVC(在beta 0.4.0以上版本)Dispatcher类.这个Action Dispatcher被包含于框架将默认被使用,除非我定义了一个类来替代Dispatcher类.在下一节中我将看到怎样配置我de应用程序来使用一个替代类–TagActionDispatcher类.

语义化 H1 标签

星期一, 06月 2nd, 2008

大家都知道搜索引擎比较喜欢H1.在SEO中H1也是很基础也很重要de一步.但有些时候为了界面风格de原因,很多标题性de文字做成了图片.大多数情况下,切割页面de时候就直接用上了图片.在相关代码上,H1也就对搜索引擎失去了作用.
<h1><img src=”http://www.****.com/xxxx.jpg”></h1>
jb51.net
其实通过一点小de调整则可以将两者兼顾.
再来看看这段.H1de相关代码对搜索引擎依然可读,我只是利用text-indent:-9999px;将“邀请好友加入”de文字远远de扔到左边去了.
[复制此相关代码]CODE:
<style>
.test{}
.test h1{margin:0; padding:0; text-indent:-9999px; width:522px; height:45px; background:url(header.gif) no-repeat;}
.testbox{background:url(bg.gif);
width:522px;
height:323px;
}
</style>
<p class=”test”>
<h1>脚本之家</h1>