목차
Zend Framework!" >Welcome to the Zend Framework!
This is your project's main page
php教程 php手册 Zend Framework教程之Zend_Layout布局助手详解

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

Jun 06, 2016 pm 07:33 PM
framework zend 어시스턴트 공들여 나열한 것 지도 시간

本文实例讲述了Zend Framework教程之Zend_Layout布局助手。分享给大家供大家参考,具体如下: 一、作用 布局的作用和模版的作用类似。可以认为是把网站通用、公共的部分拿出来作为通用的页面框架。例如一个基本的web页面,可能页面的头和尾都是一样,不一样

本文实例讲述了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,加入如下配置

1

2

3

4

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

resources.frontController.params.displayExceptions = 0

resources.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类似如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<!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>

로그인 후 복사

这里的

1

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

로그인 후 복사

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

这样,运行一下程序

www.localzend.com/layout_demo1/public/

生成的html源码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

<!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.68idc.cn/help/uploads/allimg/160318/12591943Z-0.png"  class="lazy" / alt="Zend Framework教程之Zend_Layout布局助手详解" ></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的配置和文件。

命令如下:

1

zf enable layout

로그인 후 복사

可以参考命令行章节

三、配置

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

1

2

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

resources.layout.layout = "mylayout"

로그인 후 복사

2.在action中使用layout对象

可以通过

1

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

로그인 후 복사

或者

1

2

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

$layout = $helper->getLayoutInstance();

로그인 후 복사

获取布局对象。

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

1

$layout->disableLayout();

로그인 후 복사

可以通过

1

$layout->setLayout('other');

로그인 후 복사

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

可以通过来传递赋值

1

2

$layout->assign('headertitle', 'app title');

$layout->somekey = "value"

로그인 후 복사

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

(1)

1

$layout = Zend_Layout::getMvcInstance();

로그인 후 복사

(2)

1

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

로그인 후 복사

四、其它用法,实现原理

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

<&#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));

 }

}

로그인 후 복사

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

<&#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;

  }

 }

}

로그인 후 복사

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

<&#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();

 }

}

로그인 후 복사

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

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Dewu 사용법 튜토리얼 Dewu 사용법 튜토리얼 Mar 21, 2024 pm 01:40 PM

Dewu 사용법 튜토리얼

numpy 버전 업그레이드: 상세하고 따라하기 쉬운 가이드 numpy 버전 업그레이드: 상세하고 따라하기 쉬운 가이드 Feb 25, 2024 pm 11:39 PM

numpy 버전 업그레이드: 상세하고 따라하기 쉬운 가이드

WeChat에서 결제 소리를 끄는 방법에 대한 튜토리얼 WeChat에서 결제 소리를 끄는 방법에 대한 튜토리얼 Mar 26, 2024 am 08:30 AM

WeChat에서 결제 소리를 끄는 방법에 대한 튜토리얼

photoshopcs5는 어떤 소프트웨어인가요? -photoshopcs5 사용법 튜토리얼 photoshopcs5는 어떤 소프트웨어인가요? -photoshopcs5 사용법 튜토리얼 Mar 19, 2024 am 09:04 AM

photoshopcs5는 어떤 소프트웨어인가요? -photoshopcs5 사용법 튜토리얼

DisplayX(모니터 테스트 소프트웨어) 튜토리얼 DisplayX(모니터 테스트 소프트웨어) 튜토리얼 Mar 04, 2024 pm 04:00 PM

DisplayX(모니터 테스트 소프트웨어) 튜토리얼

전문가가 가르쳐드립니다! Huawei 휴대폰에서 긴 사진을 자르는 올바른 방법 전문가가 가르쳐드립니다! Huawei 휴대폰에서 긴 사진을 자르는 올바른 방법 Mar 22, 2024 pm 12:21 PM

전문가가 가르쳐드립니다! Huawei 휴대폰에서 긴 사진을 자르는 올바른 방법

여름에는 꼭 무지개를 찍어보세요 여름에는 꼭 무지개를 찍어보세요 Jul 21, 2024 pm 05:16 PM

여름에는 꼭 무지개를 찍어보세요

WordPress 웹 페이지 정렬 문제 해결 가이드 WordPress 웹 페이지 정렬 문제 해결 가이드 Mar 05, 2024 pm 01:12 PM

WordPress 웹 페이지 정렬 문제 해결 가이드

See all articles