Requires.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * @author Jinhui.zhu <jinhui.zhu@live.cn>
  4. * @version $Id: require.php 2 2012-07-06 08:50:19Z jinhui.zhu $
  5. *
  6. * 视图部分,提供供显示的方法,支持require
  7. *
  8. */
  9. namespace Qii\View;
  10. class Requires
  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. * 设置块,可以将块放在页面上任意位置,块的开始,setEndBlock为结束,内容将会缓存到$this->_blocks中
  23. *
  24. * @param String $block
  25. */
  26. public function setStartBlock($block)
  27. {
  28. $this->_blocks[$block] = '';
  29. ob_start();
  30. }
  31. /**
  32. * 设置块,此处是结束
  33. *
  34. * @param String $block
  35. */
  36. public function setEndBlock($block)
  37. {
  38. $content = ob_get_contents();
  39. ob_end_clean();
  40. $this->_blocks[$block] = $content;
  41. }
  42. /**
  43. * 返回块里边的内容
  44. *
  45. * @param String $block
  46. * @return String
  47. */
  48. public function displayBlock($block)
  49. {
  50. return isset($this->_blocks[$block]) ? $this->_blocks[$block] : '';
  51. }
  52. /**
  53. * Assign
  54. *
  55. * @param Mix $name
  56. * @param Mix $val
  57. */
  58. public function assign($name, $val)
  59. {
  60. if (isset($val)) {
  61. $this->data[$name] = $val;
  62. } else if (is_array($name)) {
  63. foreach ($name AS $k => $v) {
  64. $this->data[$k] = $v;
  65. }
  66. }
  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), __LINE__, 1405, $tpl)) {
  78. require($tpl);
  79. }
  80. }
  81. }
  82. ?>