前言:其实这个技巧,不限于Zend Framework。我对于这个技巧,是来自Ruby On Rails的学习过程中,在Thomas的书中有提到这种ajax场景;而本文章主要讲述这个技巧在Zend Framework中如何实现。
几点说明:
1、本文章的Js部分,采用jQuery;我比较中意这个。但是本文章侧重讲的是一个思路;而不是js的写法技巧。
2、阅读本文章前,最好对Zend Framework了解;并了解Zend_Layout的概念。
一个场景的处理思考
先从一个场景来入手。假设你有一个请求时http://project-name/product/list,来显示商品列表。而,普通情况下,你的这个
请求来自左侧菜单栏;请求方式是一个ajax请求;即不更新菜单栏以及header
footer,只更新在<divid=’mainbody’></div>的内容。
这是一个常见的ajax应用场景。
一般情况下,是没什么问题。但是有一天一个聪明的用户知道这个url(知道方法很多),而直接在浏览器上输入http://project-name/product/list,那么结果呢?
你显示了一块不带有header footer 的html代码,你的界面里没有定义css,因此显示很难看;没有js,可能很多点击无效无法工作。
用户不懂这些,他只知道出现error。
这个情况,你遇到过吗?我的应用中,其实就遇到过;之前的解决办法没有,只是希望用户别这么聪明。
好了,问题明白了;解决之前,我们先一起看看Zend_Layout的使用方法。
更多的Zend_Layout的学习,可以先阅读 http://akrabat.com/2007/12/11/simple-zend_layout-example/的内容 以及官方文档 http://framework.zend.com/manual/en/zend.layout.html
首先建立一个普通的Zend_Layout使用例。
复制PHP内容到剪贴板
PHP代码:
private function _buildMVCLayout(){
//增加layout
//$this->_config 是一个Zend_Config_Xml类;内容来自一个配置文件。
if(!empty($this->_config->view->layout->enable)){
$_viewPath = trim($this->_config->view->layout->path);
$_viewPath = empty($_viewPath)?’layout’:$_viewPath;
Zend_Layout::startMvc(array(‘layoutPath’=>APP_DIR.DIRECTORY_SEPARATOR.$_viewPath));
}
}
那么,在layout的目录下,建立一个lauout.phtml
复制PHP内容到剪贴板
PHP代码:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” lang=”en”>
<head>
<meta http-equiv=”content-type” c />
<meta name=”description” c />
<meta name=”keywords” c />
<link rel=”icon” type=”image/x-icon” href=”<?php echo $this->baseUrl; ?>/public/images/layout/favicon.ico” />
<title><?php echo empty ( $this->title ) ? $this->translate ( ‘meta.title.default’ ) : $this->escape [...]
