Table des matières
Zend Framework教程之Zend_Layout布局助手详解,zendzend_layout
Zend Framework!" >Welcome to the Zend Framework!
This is your project's main page
您可能感兴趣的文章:
Maison développement back-end tutoriel php Zend Framework教程之Zend_Layout布局助手详解,zendzend_layout_PHP教程

Zend Framework教程之Zend_Layout布局助手详解,zendzend_layout_PHP教程

Jul 12, 2016 am 08:57 AM
framework zend 布局

Zend Framework教程之Zend_Layout布局助手详解,zendzend_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 = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
[staging : production]

Copier après la connexion

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">
    <&#63;php echo $this -> layout() -> content;&#63;>
   </div>
   <div id="footer">
    header
   </div>
  </body>
</html>

Copier après la connexion

这里的

<&#63;php echo $this -> layout() -> content;&#63;>

Copier après la connexion

是比较重要的。表示此处为布局的内容,也就是会动态变化的地方。

这样,运行一下程序

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 id="Welcome-to-the-span-id-zf-name-Zend-Framework-span">Welcome to the <span id="zf-name">Zend Framework!</span></h1>
 <h3 id="This-is-your-project-s-main-page">This is your project's main page</h3>
 <div id="more-information">
  <p><img  src="/static/imghw/default1.png"  data-src="http://www.bkjia.com/uploads/allimg/160306/003T934L-0.png"  class="lazy" / alt="Zend Framework教程之Zend_Layout布局助手详解,zendzend_layout_PHP教程" ></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>

Copier après la connexion

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

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

命令如下:

zf enable layout

Copier après la connexion

可以参考命令行章节

三、配置

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

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

Copier après la connexion

2.在action中使用layout对象

可以通过

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

Copier après la connexion

或者

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

Copier après la connexion

获取布局对象。

可以通过如下方式禁用当前action使用布局模式

$layout->disableLayout();

Copier après la connexion

可以通过

$layout->setLayout('other');

Copier après la connexion

来设置使用另一个布局文件

可以通过来传递赋值

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

Copier après la connexion

3.其它获取layout对象的方法

(1)

$layout = Zend_Layout::getMvcInstance();
Copier après la connexion

(2)

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

Copier après la connexion

四、其它用法,实现原理

具体其它的使用方法可以参考

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

<&#63;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&#63;
  *
  * @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));
 }
}

Copier après la connexion
<&#63;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;
  }
 }
}

Copier après la connexion
<&#63;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();
 }
}

Copier après la connexion

更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • Zend Framework教程之模型Model基本规则和使用方法
  • zend framework中使用memcache的方法
  • zend framework框架中url大小写问题解决方法
  • Zend Framework 2.0事件管理器(The EventManager)入门教程
  • Zend Framework页面缓存实例
  • 非常好用的Zend Framework分页类
  • zend Framework中的Layout(模块化得布局)详解
  • zend framework配置操作数据库实例分析
  • windows下zendframework项目环境搭建(通过命令行配置)
  • Zend Framework教程之模型Model用法简单实例

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1106114.htmlTechArticleZend Framework教程之Zend_Layout布局助手详解,zendzend_layout 本文实例讲述了Zend Framework教程之Zend_Layout布局助手。分享给大家供大家参考,具体如...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Windows 11 : le moyen simple d'importer et d'exporter des mises en page de démarrage Windows 11 : le moyen simple d'importer et d'exporter des mises en page de démarrage Aug 22, 2023 am 10:13 AM

Dans Windows 11, le menu Démarrer a été repensé et propose un ensemble simplifié d'applications disposées dans une grille de pages, contrairement à son prédécesseur, qui comportait des dossiers, des applications et des applications dans le groupe du menu Démarrer. Vous pouvez personnaliser la disposition du menu Démarrer, l'importer et l'exporter vers d'autres appareils Windows pour la personnaliser à votre guise. Dans ce guide, nous discuterons des instructions étape par étape pour importer la disposition de démarrage afin de personnaliser la disposition par défaut sur Windows 11. Qu’est-ce qu’Import-StartLayout dans Windows 11 ? Import Start Layout est une applet de commande utilisée dans Windows 10 et les versions antérieures pour importer les personnalisations du menu Démarrer dans

Comment enregistrer la disposition de la position des icônes du bureau dans Windows 11 Comment enregistrer la disposition de la position des icônes du bureau dans Windows 11 Aug 23, 2023 pm 09:53 PM

Windows 11 apporte beaucoup à la table en termes d'expérience utilisateur, mais l'itération n'est pas entièrement à l'épreuve des erreurs. Les utilisateurs rencontrent des problèmes de temps en temps et les modifications apportées au positionnement des icônes sont courantes. Alors, comment enregistrer la disposition du bureau dans Windows 11 ? Il existe des solutions intégrées et tierces pour cette tâche, qu'il s'agisse d'enregistrer la résolution d'écran de la fenêtre actuelle ou la disposition des icônes du bureau. Cela devient encore plus important pour les utilisateurs qui ont de nombreuses icônes sur leur bureau. Lisez la suite pour savoir comment enregistrer les emplacements des icônes du bureau dans Windows 11. Pourquoi Windows 11 n’enregistre-t-il pas les positions de disposition des icônes ? Voici les principales raisons pour lesquelles Windows 11 n'enregistre pas la disposition des icônes du bureau : Modifications des paramètres d'affichage : Généralement, lorsque vous modifiez les paramètres d'affichage, les personnalisations configurées

SCNotification a cessé de fonctionner [5 étapes pour y remédier] SCNotification a cessé de fonctionner [5 étapes pour y remédier] May 17, 2023 pm 09:35 PM

En tant qu'utilisateur Windows, vous rencontrerez probablement une erreur SCNotification a cessé de fonctionner à chaque démarrage de votre ordinateur. SCNotification.exe est un fichier de notification système Microsoft qui plante à chaque démarrage de votre PC en raison d'erreurs d'autorisation et de pannes de réseau. Cette erreur est également connue sous son nom d’événement problématique. Vous ne verrez donc peut-être pas cela comme un arrêt de SCNotification, mais comme un bug clr20r3. Dans cet article, nous explorerons toutes les étapes à suivre pour réparer SCNotification a cessé de fonctionner afin qu'il ne vous dérange plus. Qu'est-ce que SCNotification.e

Guide pour résoudre le désalignement des pages Web WordPress Guide pour résoudre le désalignement des pages Web WordPress Mar 05, 2024 pm 01:12 PM

Guide pour résoudre les pages Web WordPress mal alignées Dans le développement de sites Web WordPress, nous rencontrons parfois des éléments de page Web mal alignés. Cela peut être dû à des tailles d'écran sur différents appareils, à la compatibilité du navigateur ou à des paramètres de style CSS inappropriés. Pour résoudre ce désalignement, nous devons analyser soigneusement le problème, trouver les causes possibles, puis le déboguer et le réparer étape par étape. Cet article partagera certains problèmes courants de désalignement des pages Web WordPress et les solutions correspondantes, et fournira des exemples de code spécifiques pour aider à développer

Comment créer une mise en page carrousel réactive en utilisant HTML et CSS Comment créer une mise en page carrousel réactive en utilisant HTML et CSS Oct 20, 2023 pm 04:24 PM

Comment créer une mise en page de carrousel réactif à l'aide de HTML et CSS Les carrousels sont un élément courant dans la conception Web moderne. Il peut attirer l'attention de l'utilisateur, afficher plusieurs contenus ou images et basculer automatiquement. Dans cet article, nous expliquerons comment créer une mise en page carrousel réactive en utilisant HTML et CSS. Tout d’abord, nous devons créer une structure HTML de base et ajouter les styles CSS requis. Ce qui suit est une structure HTML simple : &lt;!DOCTYPEhtml&g

Compétences d'application flexibles de l'attribut de poste en H5 Compétences d'application flexibles de l'attribut de poste en H5 Dec 27, 2023 pm 01:05 PM

Comment utiliser de manière flexible l'attribut position dans H5. Dans le développement H5, le positionnement et la disposition des éléments sont souvent impliqués. A ce moment, la propriété CSS position entrera en jeu. L'attribut position peut contrôler le positionnement des éléments sur la page, y compris le positionnement relatif (relatif), le positionnement absolu (absolu), le positionnement fixe (fixe) et le positionnement collant (collant). Cet article présentera en détail comment utiliser de manière flexible l'attribut position dans le développement H5.

Windows 11 continue d'ajouter des dispositions de clavier : 4 solutions testées Windows 11 continue d'ajouter des dispositions de clavier : 4 solutions testées Dec 14, 2023 pm 05:49 PM

Pour certains utilisateurs, Windows 11 continue d'ajouter de nouvelles dispositions de clavier même s'ils n'acceptent pas ou ne confirment pas les modifications. L'équipe du logiciel WindowsReport a reproduit ce problème et sait comment empêcher Windows 11 d'ajouter une nouvelle disposition de clavier à votre PC. Pourquoi Windows 11 ajoute-t-il sa propre disposition de clavier ? Cela se produit généralement lors de l’utilisation d’une combinaison de langue et de clavier non native. Par exemple, si vous utilisez une langue d'affichage américaine et une disposition de clavier française, Windows 11 peut également ajouter un clavier anglais. Que faire si Windows 11 ajoute une nouvelle disposition de clavier dont vous ne voulez pas. Comment empêcher Windows 11 d’ajouter une disposition de clavier ? 1. Supprimez les dispositions de clavier inutiles et cliquez sur "Ouvrir"

Présentation de la méthode de disposition des fenêtres dans Win7 Présentation de la méthode de disposition des fenêtres dans Win7 Dec 26, 2023 pm 04:37 PM

Lorsque nous ouvrons plusieurs fenêtres en même temps, win7 a pour fonction d'organiser plusieurs fenêtres de différentes manières puis de les afficher en même temps, ce qui nous permet de visualiser plus clairement le contenu de chaque fenêtre. Alors, combien de dispositions de fenêtres y a-t-il dans Win7 ? À quoi ressemblent-elles ? Il existe plusieurs façons d'organiser les fenêtres de Windows 7 : trois, à savoir les fenêtres en cascade, les fenêtres d'affichage empilées et les fenêtres d'affichage côte à côte. Lorsque nous ouvrons plusieurs fenêtres, nous pouvons cliquer avec le bouton droit sur un espace vide de la barre des tâches. Vous pouvez voir trois dispositions de fenêtres. 1. Fenêtres empilées : 2. Fenêtres d’affichage empilées : 3. Fenêtres d’affichage côte à côte :

See all articles