亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

Zend Framework教程之Zend_Layout布局助手詳解

2024-05-04 23:43:34
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Zend Framework教程之Zend_Layout布局助手用法,結合實例形式詳細分析了Layout布局的相關實現技巧,需要的朋友可以參考下
 

本文實例講述了Zend Framework教程之Zend_Layout布局助手。分享給大家供大家參考,具體如下:

一、作用

布局的作用和模版的作用類似。可以認為是把網站通用、公共的部分拿出來作為通用的頁面框架。例如一個基本的web頁面,可能頁面的頭和尾都是一樣,不一樣的可能只是內容body部分不一樣,可以把公共的部分做成模版。不僅可以提高開發效率,也為后期的維護帶來方便。

二、使用

這里舉一個簡單的例子。

首先用zend studio創建一個基本的zend framework項目:layout_demo1

結構大概如下“

├─.settings
├─application
│  ├─configs
│  ├─controllers
│  ├─models
│  └─views
│      ├─helpers
│      └─scripts
│          ├─error
│          └─index
├─docs
├─library
├─public
└─tests
    ├─application
    │  └─controllers
    └─library

1.加入layout功能:

應用配置文件/layout_demo2/application/configs/application.ini,加入如下配置

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"resources.frontController.params.displayExceptions = 0resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"[staging : production]

2.相應的目錄和布局模版文件 /layout_demo2/application/layouts/scripts/layout.phtml

├─application
│  ├─configs
│  ├─controllers
│  ├─layouts
│  │  └─scripts
│  ├─models
│  └─views

layout.html類似如下:

<!doctype html><html> <head>  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">  <title>my app</title>  <body>   <div id="header">    header   </div>   <div id="content">    <?php echo $this -> layout() -> content;?>   </div>   <div id="footer">    header   </div>  </body></html>

這里的

<?php echo $this -> layout() -> content;?>

是比較重要的。表示此處為布局的內容,也就是會動態變化的地方。

這樣,運行一下程序

www.localzend.com/layout_demo1/public/

生成的html源碼如下

<!doctype html><html> <head>  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">  <title>my app</title>  <body>   <div id="header">    header   </div>   <div id="content">    <style> a:link, a:visited {  color: #0398CA; } span#zf-name {  color: #91BE3F; } div#welcome {  color: #FFFFFF;  background-image: url(http://framework.zend.com/images/bkg_header.jpg);  width: 600px;  height: 400px;  border: 2px solid #444444;  overflow: hidden;  text-align: center; } div#more-information {  background-image: url(http://framework.zend.com/images/bkg_body-bottom.gif);  height: 100%; }</style><div id="welcome"> <h1>Welcome to the <span id="zf-name">Zend Framework!</span></h1> <h3>This is your project's main page</h3> <div id="more-information">  <p><img src="http://framework.zend.com/images/PoweredBy_ZF_4LightBG.png" /></p>  <p>   Helpful Links: <br />   <a href="http://framework.zend.com/">Zend Framework Website</a> |   <a href="http://framework.zend.com/manual/en/">Zend Framework Manual</a>  </p> </div></div>   </div>   <div id="footer">    header   </div>  </body></html>

中間部分就是/layout_demo1/application/views/scripts/index/index.phtml的內容。

注入:可以通過zf的命令工具自動生成layout的配置和文件。

命令如下:

zf enable layout

可以參考命令行章節

三、配置

1.自定義存放位置和名稱可以通過application.ini配置文件配置布局文件的存放位置以及布局文件的名稱,例如:

resources.layout.layoutPath = APPLICATION_PATH "/mylayouts/scripts"resources.layout.layout = "mylayout"

2.在action中使用layout對象

可以通過

$layout = $this->_helper->layout();

或者

$helper = $this->_helper->getHelper('Layout');$layout = $helper->getLayoutInstance();

獲取布局對象。

可以通過如下方式禁用當前action使用布局模式

$layout->disableLayout();

可以通過

$layout->setLayout('other');

來設置使用另一個布局文件

可以通過來傳遞賦值

$layout->assign('headertitle', 'app title');$layout->somekey = "value"

3.其它獲取layout對象的方法

(1)

$layout = Zend_Layout::getMvcInstance();

(2)

$layout = $bootstrap->getResource('Layout');

四、其它用法,實現原理

具體其它的使用方法可以參考

Zend_Layout_Controller_Action_Helper_Layout類,
Zend_Layout_Controller_Plugin_Layout類
Zend_View_Helper_Layout類
不言自明。

<?php/** Zend_Controller_Action_Helper_Abstract */require_once 'Zend/Controller/Action/Helper/Abstract.php';/** * Helper for interacting with Zend_Layout objects * * @uses  Zend_Controller_Action_Helper_Abstract * @category Zend * @package Zend_Controller * @subpackage Zend_Controller_Action * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd  New BSD License */class Zend_Layout_Controller_Action_Helper_Layout extends Zend_Controller_Action_Helper_Abstract{ /**  * @var Zend_Controller_Front  */ protected $_frontController; /**  * @var Zend_Layout  */ protected $_layout; /**  * @var bool  */ protected $_isActionControllerSuccessful = false; /**  * Constructor  *  * @param Zend_Layout $layout  * @return void  */ public function __construct(Zend_Layout $layout = null) {  if (null !== $layout) {   $this->setLayoutInstance($layout);  } else {   /**    * @see Zend_Layout    */   require_once 'Zend/Layout.php';   $layout = Zend_Layout::getMvcInstance();  }  if (null !== $layout) {   $pluginClass = $layout->getPluginClass();   $front = $this->getFrontController();   if ($front->hasPlugin($pluginClass)) {    $plugin = $front->getPlugin($pluginClass);    $plugin->setLayoutActionHelper($this);   }  } } public function init() {  $this->_isActionControllerSuccessful = false; } /**  * Get front controller instance  *  * @return Zend_Controller_Front  */ public function getFrontController() {  if (null === $this->_frontController) {   /**    * @see Zend_Controller_Front    */   require_once 'Zend/Controller/Front.php';   $this->_frontController = Zend_Controller_Front::getInstance();  }  return $this->_frontController; } /**  * Get layout object  *  * @return Zend_Layout  */ public function getLayoutInstance() {  if (null === $this->_layout) {   /**    * @see Zend_Layout    */   require_once 'Zend/Layout.php';   if (null === ($this->_layout = Zend_Layout::getMvcInstance())) {    $this->_layout = new Zend_Layout();   }  }  return $this->_layout; } /**  * Set layout object  *  * @param Zend_Layout $layout  * @return Zend_Layout_Controller_Action_Helper_Layout  */ public function setLayoutInstance(Zend_Layout $layout) {  $this->_layout = $layout;  return $this; } /**  * Mark Action Controller (according to this plugin) as Running successfully  *  * @return Zend_Layout_Controller_Action_Helper_Layout  */ public function postDispatch() {  $this->_isActionControllerSuccessful = true;  return $this; } /**  * Did the previous action successfully complete?  *  * @return bool  */ public function isActionControllerSuccessful() {  return $this->_isActionControllerSuccessful; } /**  * Strategy pattern; call object as method  *  * Returns layout object  *  * @return Zend_Layout  */ public function direct() {  return $this->getLayoutInstance(); } /**  * Proxy method calls to layout object  *  * @param string $method  * @param array $args  * @return mixed  */ public function __call($method, $args) {  $layout = $this->getLayoutInstance();  if (method_exists($layout, $method)) {   return call_user_func_array(array($layout, $method), $args);  }  require_once 'Zend/Layout/Exception.php';  throw new Zend_Layout_Exception(sprintf("Invalid method '%s' called on layout action helper", $method)); }}
<?php/** Zend_Controller_Plugin_Abstract */require_once 'Zend/Controller/Plugin/Abstract.php';/** * Render layouts * * @uses  Zend_Controller_Plugin_Abstract * @category Zend * @package Zend_Controller * @subpackage Plugins * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd  New BSD License * @version $Id: Layout.php 23775 2011-03-01 17:25:24Z ralph $ */class Zend_Layout_Controller_Plugin_Layout extends Zend_Controller_Plugin_Abstract{ protected $_layoutActionHelper = null; /**  * @var Zend_Layout  */ protected $_layout; /**  * Constructor  *  * @param Zend_Layout $layout  * @return void  */ public function __construct(Zend_Layout $layout = null) {  if (null !== $layout) {   $this->setLayout($layout);  } } /**  * Retrieve layout object  *  * @return Zend_Layout  */ public function getLayout() {  return $this->_layout; } /**  * Set layout object  *  * @param Zend_Layout $layout  * @return Zend_Layout_Controller_Plugin_Layout  */ public function setLayout(Zend_Layout $layout) {  $this->_layout = $layout;  return $this; } /**  * Set layout action helper  *  * @param Zend_Layout_Controller_Action_Helper_Layout $layoutActionHelper  * @return Zend_Layout_Controller_Plugin_Layout  */ public function setLayoutActionHelper(Zend_Layout_Controller_Action_Helper_Layout $layoutActionHelper) {  $this->_layoutActionHelper = $layoutActionHelper;  return $this; } /**  * Retrieve layout action helper  *  * @return Zend_Layout_Controller_Action_Helper_Layout  */ public function getLayoutActionHelper() {  return $this->_layoutActionHelper; } /**  * postDispatch() plugin hook -- render layout  *  * @param Zend_Controller_Request_Abstract $request  * @return void  */ public function postDispatch(Zend_Controller_Request_Abstract $request) {  $layout = $this->getLayout();  $helper = $this->getLayoutActionHelper();  // Return early if forward detected  if (!$request->isDispatched()   || $this->getResponse()->isRedirect()   || ($layout->getMvcSuccessfulActionOnly()    && (!empty($helper) && !$helper->isActionControllerSuccessful())))  {   return;  }  // Return early if layout has been disabled  if (!$layout->isEnabled()) {   return;  }  $response = $this->getResponse();  $content = $response->getBody(true);  $contentKey = $layout->getContentKey();  if (isset($content['default'])) {   $content[$contentKey] = $content['default'];  }  if ('default' != $contentKey) {   unset($content['default']);  }  $layout->assign($content);  $fullContent = null;  $obStartLevel = ob_get_level();  try {   $fullContent = $layout->render();   $response->setBody($fullContent);  } catch (Exception $e) {   while (ob_get_level() > $obStartLevel) {    $fullContent .= ob_get_clean();   }   $request->setParam('layoutFullContent', $fullContent);   $request->setParam('layoutContent', $layout->content);   $response->setBody(null);   throw $e;  } }}
<?php/** Zend_View_Helper_Abstract.php */require_once 'Zend/View/Helper/Abstract.php';/** * View helper for retrieving layout object * * @package Zend_View * @subpackage Helper * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd  New BSD License */class Zend_View_Helper_Layout extends Zend_View_Helper_Abstract{ /** @var Zend_Layout */ protected $_layout; /**  * Get layout object  *  * @return Zend_Layout  */ public function getLayout() {  if (null === $this->_layout) {   require_once 'Zend/Layout.php';   $this->_layout = Zend_Layout::getMvcInstance();   if (null === $this->_layout) {    // Implicitly creates layout object    $this->_layout = new Zend_Layout();   }  }  return $this->_layout; } /**  * Set layout object  *  * @param Zend_Layout $layout  * @return Zend_Layout_Controller_Action_Helper_Layout  */ public function setLayout(Zend_Layout $layout) {  $this->_layout = $layout;  return $this; } /**  * Return layout object  *  * Usage: $this->layout()->setLayout('alternate');  *  * @return Zend_Layout  */ public function layout() {  return $this->getLayout(); }}


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
青青精品视频播放| 91久久国产精品| 久久99久国产精品黄毛片入口| 亚洲成人av片| 欧美黄色三级网站| 亚洲激情中文字幕| 久久精品久久久久电影| 日韩中文字幕在线| 国产精品白嫩初高中害羞小美女| 亚洲影院污污.| 亚洲一区二区三区四区视频| 午夜精品久久久久久99热| 日产精品99久久久久久| 国产精品网站入口| 色老头一区二区三区在线观看| 中文字幕亚洲一区在线观看| 久久精品视频中文字幕| 美乳少妇欧美精品| 韩国视频理论视频久久| 欧美亚洲国产日韩2020| 日本中文字幕不卡免费| 欧美日韩免费网站| 国产精品天天狠天天看| 2025国产精品视频| 一夜七次郎国产精品亚洲| y97精品国产97久久久久久| 91黑丝高跟在线| 亚洲图片制服诱惑| 国产精品老女人精品视频| 97久久精品人搡人人玩| 亚洲福利视频网站| 最近2019年好看中文字幕视频| 久久久国产视频91| 欧美日韩中文字幕日韩欧美| 久久国产精品网站| 大胆人体色综合| 亚洲色图17p| 亚洲桃花岛网站| 亚洲一级片在线看| xxav国产精品美女主播| 欧美午夜视频一区二区| 成人国产精品日本在线| 中文字幕亚洲综合久久| 亚洲网站视频福利| 精品高清一区二区三区| 久久久久www| 欧美一级视频在线观看| 久久精品亚洲一区| 国产91精品黑色丝袜高跟鞋| 在线观看精品国产视频| 91在线视频九色| 亚洲影视中文字幕| 亚洲福利在线看| 亚洲黄色在线看| 亚洲国产99精品国自产| 久久久99免费视频| 成人疯狂猛交xxx| 在线观看日韩专区| 国内成人精品一区| 欧美激情中文字幕乱码免费| 亚洲人成人99网站| 日韩av在线精品| 97精品伊人久久久大香线蕉| 国内精品一区二区三区四区| 中文字幕亚洲第一| 91精品国产九九九久久久亚洲| 欧美多人乱p欧美4p久久| 久久久电影免费观看完整版| 国产精品直播网红| 成人一区二区电影| 成年人精品视频| 欧美国产激情18| 亚洲最新在线视频| 69久久夜色精品国产7777| 久久综合色88| 久久精品国产电影| 国内外成人免费激情在线视频网站| 国产福利视频一区二区| 欧美在线不卡区| 国产精品99久久久久久久久久久久| 国内精品久久久久久| 精品久久久久久久久久久久久| 欧美成人三级视频网站| 中文字幕精品一区二区精品| 亚洲图片欧美午夜| 91av国产在线| 亚洲精品自拍第一页| 热草久综合在线| 97视频com| 亚洲永久在线观看| 久久久av亚洲男天堂| 国产精品偷伦免费视频观看的| 亚洲成**性毛茸茸| 久久精品国产清自在天天线| 久久久极品av| 国产精品视频专区| 欧美猛交免费看| 国产精品中文字幕在线观看| 日韩欧美国产免费播放| www.国产精品一二区| 久久亚洲电影天堂| 国产精品白嫩美女在线观看| 国产精品视频不卡| 一区二区三区视频观看| 欧美高跟鞋交xxxxhd| 国产一区二区三区欧美| 久久夜精品香蕉| 福利一区视频在线观看| 日韩电影中文 亚洲精品乱码| 91免费的视频在线播放| 狠狠色噜噜狠狠狠狠97| 亚洲精品一区二区三区婷婷月| 韩剧1988免费观看全集| 日韩经典中文字幕| 欧美激情视频一区| 精品久久久一区二区| 亚洲性视频网站| 亚洲精品有码在线| 久久久国产91| 欧美香蕉大胸在线视频观看| 在线日韩第一页| 日韩精品电影网| 2019中文在线观看| 久久这里有精品| 91亚洲精品久久久久久久久久久久| 欧美一级淫片丝袜脚交| 亚洲天堂免费在线| 欧美亚洲国产日韩2020| 日韩免费视频在线观看| 日韩精品在线观看网站| 另类视频在线观看| 91亚洲人电影| 亚洲国产精品人久久电影| 97在线精品国自产拍中文| 欧美丝袜美女中出在线| 一区二区亚洲精品国产| 亚洲精品视频免费在线观看| 久久69精品久久久久久久电影好| 欧美日韩国产成人在线观看| 亚洲福利影片在线| 日韩av手机在线| 日韩成人av网| 国产精品一区二区三区久久久| 欧美一级高清免费播放| 成人免费激情视频| 正在播放欧美一区| 国产亚洲一区精品| 日韩在线观看av| 欧美大秀在线观看| 91麻豆国产精品| 久久久国产一区二区| 亚洲欧美日本伦理| 亚洲欧美精品一区| 国产成人精品午夜| 日韩成人在线视频网站| 久久久久亚洲精品| 日韩在线精品视频| 日韩免费在线播放| 综合久久五月天| 国内免费久久久久久久久久久| 国产剧情久久久久久| 久久精品国产v日韩v亚洲| 欧美在线性视频| 久热精品在线视频|