PHP编程:PHP.MVC的模板标签体系(四)
建议大家买一本书,而不光是在网上看一些零碎的资料,一本书毕竟会讲的系统一些,全面一些,而且印刷的书不受电脑的限制,但是建议在看书的时候最好旁边有电脑,这样可以很及时地上机实践。 页面结构在这个单位中咱们将看到若何利用模板标签体系机关一个尺度的模板页面。这个例子咱们利用了一个复杂的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要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 本文当是我的笔记啦,遇到的问题随时填充 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) Ps:以上纯属原创,如有雷同,纯属巧合 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 本文当是我的笔记啦,遇到的问题随时填充 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 基础有没有对学习php没有太大区别,关键是兴趣。 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 写的比较杂,因为我也是个新手,不当至于大家多多指正。 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
页:
[1]