|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
建议大家买一本书,而不光是在网上看一些零碎的资料,一本书毕竟会讲的系统一些,全面一些,而且印刷的书不受电脑的限制,但是建议在看书的时候最好旁边有电脑,这样可以很及时地上机实践。 页面结构
在这个单位中咱们将看到若何利用模板标签体系机关一个尺度的模板页面。这个例子咱们利用了一个复杂的HTML页面结构,请看下图:
这个页面有多个尺度单位构成,就像页面设计者和开辟者熟习的那样.这个页面的主体由3个包括的单位构成:页眉,页内容主体和页脚.咱们如今就看看这些单位而且懂得若何利用模板标签体系来完成.
页主体
上面的代码单位显示的是主体:
The Page Body Layout
1
<@ 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>
2 <@ =viewConfig.getAppTitle @>
</title>
</head>
<body>
<table class='pageLayoutTable'>
<!-- PAGE HEADER -->
<tr>
<td class='pageHeader'>
<!-- including the page header component -->
<!-- The base template base directory is "./tpl" -->
3 <@ include 'pageHeader.ssp' @>
</td>
</tr>
<!-- PAGE CONTENTS -->
<tr valign='top'>
<td class='pageContent'>
<!-- including the page contents component -->
4 <@ include 'sale/pageContent.ssp' @>
</td>
</tr>
<!-- PAGE FOOTER -->
<tr>
<td class='pageFooter'>
<!-- including the page footer omponent -->
5 <@ include 'pageFooter.ssp' @>
</td>
</tr>
</table>
</body>
</html>
1:页声明
第一个风趣的条目是页顶部的页声明(1).咱们在页面入手下手声了然这些变量,因而这些变量将能鄙人面的页面和像页眉那样的包括页所利用.
2:页题目
下一步咱们利用表达式来初始化页面题目(2).这个值可以从设置装备摆设文件中view-resources元素使用ViewResourcesConfig->getAppTitle来失掉:
<view-resources
appTitle = "Flash Jacks' Sleek Tab Site"
...
</view-resources>
3:页眉
页眉是下一个风趣的条目(3).在这里咱们利用包括指令来拔出页眉模板文件到页主体中.咱们将鄙人一个子单位中来看一看页眉.
咱们仅仅利用了页面直接去读取页眉,不管页的组件存储在哪里.这是一个好时机来引见模板标签体系的目次设置.默许情形下,模板目次结构以下所示(注重这些途径相对咱们的使用法式):
The Default PhpMVC_Tags Template Directory Layout Paths (relative)
The Template Files './WEB-INF/tpl'
The Compiled Template Files './WEB-INF/tpl_C'
假如需求的话咱们可以在设置装备摆设文件的view-resources结点来从头界说他们,就像如许:
<view-resources
...
tplDir = "./WEB-INF/tpl-admin"
tplDirC = "./WEB-INF/tpl_admin_C"
...
</view-resources>
4:页内容主体
这是别的一个包括指令被用来拔出模板文件(4)到主体中.注重包括的文件位于模板目次的sales子目次中:
"./WEB-INF/tpl/sale/pageContent.ssp"
5:页脚
又是一个包括指令,就像页眉一样.
页眉单位
在这个例子中页眉模板文件('pageHeader.ssp')只是一个复杂的单位,就像如许:
<!-- Page Header -->
<span>
<@ =viewConfig.getAppTitle @>
</span>
当主体页面(包含包括的页面)被编译的时分,页眉的表达式被转换成上面如许:
<!-- Page Header -->
<span>
<?php print $viewConfig->getAppTitle(); ?>
</span>
被编译的页面被存储在编译模板目次中,就像下面所说的,默许的编译模板目次是:
'./WEB-INF/tpl_C'
页内容主体单位
页内容主体模板文件有一点庞杂.文件('sale/pageContent.ssp')内容显示以下:
...
1
<@ item1=data->getValueBean("ITEM_1") @>
<@ products=data->getValueBean("PRODUCTS_ARRAY") @>
2
<h4><@=dealHeading @> <@=saleMonth @></h4>
3
<b>Clearance deals</b>
<table class='productsTable'>
<tr>
<td class='prodItemDesc'>
<@ =item1.getName @>
</td>
<td class='prodItemValue'>
<@ =item1.getCost @>
</td>
</tr>
</table>
4
<b>Todays specials</b>
<table class='productsTable'>
<?php foreach($products as $item) { ?>
<tr>
<td class='prodItemDesc'>
<@ =item.getName @>
</td>
<td class='prodItemValue'>
<@ =item.getCost @>
</td>
</tr>
<?php } ?>
</table>
<b>Our Staff at Your Service</b>
...
5
<table class='productsTable'>
<tr>
<td class='prodItemDesc'>
<b>Area Manager: </b>
</td>
<td class='prodItemDesc'>
<@ =viewConfig.getAreaManager @>
</td>
</tr>
...
</table>
1:一些更多的声明
在页面顶部所显示的额定声明(1)能让咱们声明页变量以便上面可以利用.在内容被处置以后,这些声明将在编译后像上面如许显示:
<?php $item1=$data->getValueBean("ITEM_1"); ?>
...
<?php $products=$data->getValueBean("PRODUCTS_ARRAY"); ?>
2:利用表达式来显示内容单位题目
如今咱们利用两个表达式(2)来显示内容单位的题目.注重咱们声明这些变量是"全局"变量在主页面的顶部.处置完后,表达式将转换这些代码,就像如许:
<?php print $dealHeading; ?> <?php print $saleMonth; ?>
当页面被显示到用户的阅读器中,内容单位的题目看起来就像如许:
Jack's Super Deals for : May 2010.
3:利用表达式来显示一些数据条目
如今咱们能显示一些实践的数据(3).在这个页内容主体单位中咱们会见一些在PhpMVCTabAction类的ActionObject中的产物条目数据.一个简化版的PhpMVCTabAction类鄙人面展现:
class PhpMVCTabAction extends Action {
...
function execute($mapping, $form, &$request, &$response) {
// Our value bean container
$valueBeans =& new ValueBeans();
// Define some strings we need on our View template page
// These could be defined globally in the phpmvc-config.xml file.
// See: ExtendedController example.
$appTitle = "Flash Jack's Include Page";
$saleMonth = "May 2010";
$saleTitle = "Flash Jack's Super Sale";
$dealHeading = "Jack's Super Deals for :";
...
// Save the string variables to our Value object
$valueBeans->addValueBean('APP_TITLE' , $appTitle);
$valueBeans->addValueBean('SALE_MONTH' , $saleMonth);
$valueBeans->addValueBean('SALE_TITLE' , $saleTitle);
$valueBeans->addValueBean('DEAL_HEADING' , $dealHeading);
...
// Some float values we could receive from a database query
// Note: The prices are formatted in the Products class constructor.
// Eg: "$ n,nnn.nn"
$price1 = 125.00;
...
// Setup some clearance deals (individual object instances):
// Note: The Product class file was included in our local prepend.php file
$item1 = new Product('Super Duper', $price1);
...
$valueBeans->addValueBean('ITEM_1', $item1);
...
// Todays specials (array of object instances)
$products = array();
$products[] = new Product('Gooses Bridle', $price3);
...
$valueBeans->addValueBean('PRODUCTS_ARRAY', $products);
// Our staff
$staff1 =& new Staff('Bruce', 'Sales', 'Karate');
...
$valueBeans->addValueBean('STAFF_1', $staff1);
...
// Save the Value object
$this->saveValueObject($request, $valueBeans);
在下面的代码中,咱们能看到$item1被创立并被保留成ActionObject的valueBeans条目.Bean数据条目如今能在模板页面中被从头取得:
<@ item1=data->getValueBean("ITEM_1") @>
咱们可以像上面那样显示条目标值:
<@ =item1.getName @>
...
<@ =item1.getCost @>
4:显示数组
咱们也能够直接利用一些PHP代码在咱们的模板页上.在这个分别的MVC形式中,咱们应当仅在这里编写代码去把持这些经由过程ActionObject和ViewResourcesConfig实例(能够咱们的自界说Bean也能够)供应的数据.在下面的也内容单位('sale/pageContent.ssp')中,咱们利用一个PHP的foreach语法(4)来轮回读取$products数组.咱们能在下面的PhpMVCTabAction类中看到$products数组被创立并被保留在ActionObject中,就和下面的$item1 Bean类似.在foreach轮回中咱们能利用表达式来显示产物数据:
<?php foreach($products as $item) { ?>
<tr>
<td class='prodItemDesc'>
<@ =item.getName @>
</td>
<td class='prodItemValue'>
<@ =item.getCost @>
</td>
</tr>
<?php } ?>
5:显示ViewResourcesConfig属性
最初咱们从view-resources元素所界说的ViewResourcesConfig属性来显示"Area Manager"(5)在咱们的内容页:
<view-resources
appTitle = "Flash Jacks' Sleek Tab Site"
...
className = "MyViewResourcesConfig">
<!-- We can set some properties on our custom ViewResourcesConfig class -->
<set-property property="areaManager" value="Joe J. Blogs Esq."/>
</view-resources>
然而注重在这个例子中咱们利用了一个承继ViewResourcesConfig类的对象(MyViewResourcesConfig)来设置一些自界说的属性.咱们界说了一个扩大ViewResourcesConfig类的对象,在设置装备摆设文件里利用className="MyViewResourcesConfig"属性,而且MyViewResourcesConfig类界说在文件"MyViewResourcesConfig.php"中.MyViewResourcesConfig类(classes/MyViewResourcesConfig.php)完成了setter/getter办法去向理自界说属性("areaManager"),这个属性咱们在view-resources结点中界说:
class MyViewResourcesConfig extends ViewResourcesConfig {
// ----- Properties ----------------------------------------------------- //
var $areaManager = '';
function getAreaManager() {
return $this->areaManager;
}
function setAreaManager($areaManager) {
$this->areaManager = $areaManager;
}
咱们如今能利用表达式在咱们的页面上完成"Area Manager"了:
<@ =viewConfig.getAreaManager @>
注重:在真实的使用法式中数据能从关系型数据库中失掉.
页脚单位
页脚单位和下面会商过的页眉单位的处置相相似.页脚模板文件('tpl/pageFooter.ssp')就像如许:
<!-- Page Footer -->
<span>
<@ =viewConfig.getCopyright @>
</span>
当主体页面(包含包括的页面)被编译,在页脚中的表达式被转换成上面如许:
<!-- Page Footer -->
<span>
<?php print $viewConfig->getCopyright(); ?>
</span>
编译的页眉页面被存储在编译模板目次.默许的编译模板目次是:
'./WEB-INF/tpl_C'
转自:静态网制造指南 www.knowsky.com要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。 |
|