Includes.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * @author Jinhui.zhu <jinhui.zhu@live.cn>
  4. * @version $Id: include.php 2 2012-07-06 08:50:19Z jinhui.zhu $
  5. *
  6. * 视图部分,提供供显示的方法,支持include
  7. *
  8. */
  9. namespace Qii\View;
  10. class Includes
  11. {
  12. const VERSION = '1.2';
  13. public $data;
  14. private $viewPath;
  15. private $_blocks = array();
  16. public function __construct()
  17. {
  18. $appConfigure = \Qii\Config\Register::getAppConfigure(\Qii\Config\Register::get(\Qii\Consts::APP_INI_FILE));
  19. $this->viewPath = $appConfigure['view']['path'];
  20. }
  21. /**
  22. * Assign
  23. *
  24. * @param Mix $name
  25. * @param Mix $val
  26. */
  27. public function assign($name, $val = null)
  28. {
  29. if (isset($val)) {
  30. $this->data[$name] = $val;
  31. } else if (is_array($name)) {
  32. foreach ($name AS $k => $v) {
  33. $this->data[$k] = $v;
  34. }
  35. }
  36. }
  37. /**
  38. * 设置块,可以将块放在页面上任意位置,块的开始,setEndBlock为结束,内容将会缓存到$this->_blocks中
  39. *
  40. * @param String $block
  41. */
  42. public function setStartBlock($block)
  43. {
  44. $this->_blocks[$block] = '';
  45. ob_start();
  46. }
  47. /**
  48. * 设置块,此处是结束
  49. *
  50. * @param String $block
  51. */
  52. public function setEndBlock($block)
  53. {
  54. $content = ob_get_contents();
  55. ob_end_clean();
  56. $this->_blocks[$block] = $content;
  57. }
  58. /**
  59. * 返回块里边的内容
  60. *
  61. * @param String $block
  62. * @return String
  63. */
  64. public function displayBlock($block)
  65. {
  66. return isset($this->_blocks[$block]) ? $this->_blocks[$block] : '';
  67. }
  68. /**
  69. * 载入数据和模板
  70. *
  71. * @param String $tpl
  72. */
  73. public function display($tpl)
  74. {
  75. $tpl = $this->viewPath . DS . $tpl;
  76. extract((array)$this->data);
  77. if (!\Qii::setError(is_file($tpl), 1405, $tpl . ' does not exist')) {
  78. include($tpl);
  79. }
  80. }
  81. }
  82. ?>