Render.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace Qii\View;
  3. class Render
  4. {
  5. protected $_view;
  6. public function __construct(&$view, \Qii\View\Resource $resource)
  7. {
  8. $this->_view = $view;
  9. }
  10. /**
  11. * renderJS
  12. * @param \widget\resource $resource 资源
  13. */
  14. public function renderLinkJs(\Qii\View\Resource $resource)
  15. {
  16. $blockJs = array();
  17. if (isset(\Qii\View\Dependence::$dependence['blockLinkJs'])) {
  18. $resource->addBlockLinkJs(\Qii\View\Dependence::$dependence['blockLinkJs']);
  19. }
  20. if ($resource->blockLinkJs) {
  21. if (is_array($resource->blockLinkJs)) {
  22. foreach ($resource->blockLinkJs AS $js) {
  23. if ($js == '') continue;
  24. $blockJs[] = '<script src="' . \Qii\Request\Url::getSourceFullUrl($js) . '"></script>';
  25. }
  26. } else {
  27. $blockJs[] = '<script src="' . \Qii\Request\Url::getSourceFullUrl($resource->blockLinkJs) . '"></script>';
  28. }
  29. }
  30. $this->_view->assign('blockLinkJs', "\n" . join("\n", $blockJs) . "\n");
  31. }
  32. /**
  33. * renderCss
  34. * @param \widget\resource $resource 资源
  35. */
  36. public function renderLinkCss(\Qii\View\Resource $resource)
  37. {
  38. $blockCss = array();
  39. if (isset(\Qii\View\Dependence::$dependence['blockLinkCss'])) {
  40. $resource->addBlockLinkCss(\Qii\View\Dependence::$dependence['blockLinkCss']);
  41. }
  42. if ($resource->blockLinkCss) {
  43. if (is_array($resource->blockLinkCss)) {
  44. foreach ($resource->blockLinkCss AS $css) {
  45. if ($css == '') continue;
  46. $blockCss[] = '<link href="' . \Qii\Request\Url::getSourceFullUrl($css) . '" rel="stylesheet">';
  47. }
  48. } else {
  49. $blockCss[] = '<link href="' . \Qii\Request\Url::getSourceFullUrl($resource->blockLinkCss) . '" rel="stylesheet">';
  50. }
  51. }
  52. $this->_view->assign('blockLinkCss', "\n" . join("\n", $blockCss) . "\n");
  53. }
  54. /**
  55. * renderJS
  56. * @param \widget\resource $resource 资源
  57. */
  58. public function renderJs(\Qii\View\Resource $resource)
  59. {
  60. $blockJs = '';
  61. if (isset(\Qii\View\Dependence::$dependence['blockJs'])) {
  62. $resource->addBlockJs(\Qii\View\Dependence::$dependence['blockJs']);
  63. }
  64. if ($resource->blockJs) {
  65. if (is_array($resource->blockJs)) {
  66. foreach ($resource->blockJs AS $js) {
  67. if ($js == '') continue;
  68. $blockJs .= $this->_view->fetch($js);
  69. }
  70. } else {
  71. $blockJs .= $this->_view->fetch($resource->blockJs);
  72. }
  73. }
  74. $blockJs .= join('\n', \Qii\View\Dependence::$blockJS);
  75. $this->_view->assign('blockJs', "\n" . $blockJs . "\n");
  76. }
  77. /**
  78. * renderCss
  79. * @param \widget\resource $resource 资源
  80. */
  81. public function renderCss(\Qii\View\Resource $resource)
  82. {
  83. $blockCss = '';
  84. if (isset(\Qii\View\Dependence::$dependence['blockCss'])) {
  85. $resource->addBlockCss(\Qii\View\Dependence::$dependence['blockCss']);
  86. }
  87. if ($resource->blockCss) {
  88. if (is_array($resource->blockCss)) {
  89. foreach ($resource->blockCss AS $css) {
  90. if ($css == '') continue;
  91. $blockCss .= $this->_view->fetch($css);
  92. }
  93. } else {
  94. $blockCss .= $this->_view->fetch($resource->blockCss);
  95. }
  96. }
  97. $blockCss .= join('\n', \Qii\View\Dependence::$blockCss);
  98. $this->_view->assign('blockCss', "\n" . $blockCss . "\n");
  99. }
  100. /**
  101. * 通过页面定义的资源去显示内容
  102. *
  103. * @param string $tpl 模板名
  104. */
  105. public function render(\Qii\View\Resource $resource)
  106. {
  107. $this->_view->assign('pageTitle', $resource->title);
  108. $this->_view->assign('bodyClass', $resource->bodyClass);
  109. $html = array();
  110. $html[] = '<div class="' . $resource->wrapperClass . '">';
  111. $dependence = array();
  112. //todo 针对dependence当方法在后边的情况还没处理完
  113. $executed = array();
  114. foreach ($resource->resource AS $index => $res) {
  115. $callFunction = $res;
  116. $className = array_shift($res);
  117. $method = array_shift($res);
  118. //如果是存在依赖,先跳过,等依赖的执行了再执行
  119. if (isset($resource->dependence[$className . ':' . $method]) && !isset($executed[$resource->dependence[$className . ':' . $method]])) {
  120. $dependence[$resource->dependence[$className . ':' . $method]][] = array($index, $callFunction);
  121. $html[$index] = '';
  122. continue;
  123. }
  124. $executed[$className . ':' . $method] = true;
  125. $class = \Qii\Autoloader\Psr4::loadClass($className);
  126. $class->controller = $this;
  127. $class->actionId = $this->_action;
  128. $class->input = $resource->input;
  129. //如果是返回了false,就直接退出
  130. $result = call_user_func_array(array($class, $method), $res);
  131. if ($result === false) {
  132. return false;
  133. }
  134. $html[$index] = $result;
  135. //如果是依赖的方法已经执行,此处再执行原有的方法
  136. if (isset($dependence[$className . ':' . $method])) {
  137. foreach ($dependence[$className . ':' . $method] AS $key => $val) {
  138. $i = $val[0];
  139. $subRes = $val[1];
  140. $className = array_shift($subRes);
  141. $method = array_shift($subRes);
  142. $class = \Qii\Autoloader\Psr4::loadClass($className);
  143. $class->controller = $this;
  144. $class->actionId = $this->_action;
  145. $class->input = $resource->input;
  146. $executed[$className . ':' . $method] = true;
  147. $result = call_user_func_array(array($class, $method), $subRes);
  148. //如果是返回了false,就直接退出
  149. if ($result === false) {
  150. return false;
  151. }
  152. $html[$i] = $result;
  153. unset($dependence[$key]);
  154. }
  155. }
  156. }
  157. $html[] = '</div>';
  158. $html[] = join('\n', \Qii\View\Dependence::$blockHTML);;
  159. $this->_view->assign('bodyBlock', join("\n", $html));
  160. }
  161. }