/** * 渲染指定的视图文件 * * 渲染时,视图要使用的数据保存在控件的 $view 属性中。 * * @param string $viewname * @param boolean $return * * @return string */ protected function _renderBlock($viewname, $return = false) { if (!is_object($this->_view_adapter)) { $adapter_class = is_null($this->_view_adapter_class) ? $this->context->getIni('view_adapter') : $this->_view_adapter_class; $adapter_obj_id = "webcontrols_{$adapter_class}"; if (Q::isRegistered($adapter_obj_id)) { /** * @var QView_Adapter_Abstract */ $adapter = Q::registry($adapter_obj_id); } else { /** * @var QView_Adapter_Abstract */ $adapter = new $adapter_class($this->context); Q::register($adapter, $adapter_obj_id); } } else { $adapter = $this->_view_adapter; } $adapter->clear(); $adapter->assign($this->view); $adapter->assign('_ctx', $this->context); $filename = QView::getControlViewFilename($this->context, $adapter, $viewname, $this->_controls_view_dir); if ($return) { return $adapter->fetch($filename); } else { return $adapter->display($filename); } }
/** * 输出一个元素 */ function element($element) { $dir = QView::getExtraViewDir($this->context, '_elements', 'elements_view_dir'); $filename = "{$element}_element{$this->tpl_file_ext}"; if ($this->context->getIni('view_config/flat_dir') > 0) { $filename = '_' . $filename; } $_ctx = $this->context; include "{$dir}/{$filename}"; }
/** * 渲染表单 * * @param QContext $context * @param boolean $return * * @return string */ function render(QContext $context, $return = false) { $this->_event(self::BEFORE_RENDER_FORM, $this); if (!is_object($this->_view_adapter)) { $adapter_class = is_null($this->_view_adapter_class) ? $context->getIni('view_adapter') : $this->_view_adapter_class; $adapter_obj_id = "form_{$adapter_class}"; if (Q::isRegistered($adapter_obj_id)) { $adapter = Q::registry($adapter_obj_id); } else { $adapter = new $adapter_class($context); Q::register($adapter, $adapter_obj_id); } } else { $adapter = $this->_view_adapter; } /* @var $adapter QView_Adapter_Abstract */ $viewname = !empty($this->_viewname) ? $this->_viewname : 'form'; $filename = QView::getViewLayoutsFilename($adapter->context, $adapter, $viewname); $adapter->clear(); $adapter->assign('form', $this); $adapter->assign('_ctx', $context); $output = $adapter->fetch($filename); $this->_event(self::AFTER_RENDER_FORM, $this); if (!$return) { echo $output; $output = null; } return $output; }