| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <?php
- namespace zin;
- class pageBase extends wg
- {
- static $tag = 'html';
- /**
- * @var mixed[]
- */
- protected static $defineProps = array
- (
- 'metas?: string|array',
- 'title?: string',
- 'bodyProps?: array',
- 'bodyClass?: array|string',
- 'zui?: bool',
- 'lang?: string',
- 'rawContent?: bool'
- );
- /**
- * @var mixed[]
- */
- protected static $defaultProps = array
- (
- 'zui' => false,
- 'display' => true,
- 'metas' => array('<meta charset="utf-8">', '<meta http-equiv="X-UA-Compatible" content="IE=edge">', '<meta name="viewport" content="width=device-width, initial-scale=1">', '<meta name="renderer" content="webkit">')
- );
- /**
- * @var mixed[]
- */
- protected static $defineBlocks = array('head' => array());
- protected function buildHead()
- {
- return $this->block('head');
- }
- protected function buildBody()
- {
- return $this->children();
- }
- protected function build()
- {
- global $lang, $config, $app;
- $setXuanClass = str_contains($_SERVER['HTTP_USER_AGENT'], 'xuanxuan')
- ? setClass('xxc-embed')
- : null;
- $zui = $this->prop('zui');
- $head = $this->buildHead();
- $body = $this->buildBody();
- $context = context();
- $jsConfig = \js::getJSConfigVars();
- $bodyProps = $this->prop('bodyProps');
- $bodyClass = $this->prop('bodyClass');
- $metas = $this->prop('metas');
- $rawContent = $this->prop('rawContent', !$context->rawContentCalled);
- $hookContent = $this->prop('hookContent', !$context->hookContentCalled);
- $title = $this->props->get('title', data('title')) . " - $lang->zentaoPMS";
- $attrs = $this->getRestProps();
- $css = array(data('pageCSS'), '/*{{ZIN_PAGE_CSS}}*/');
- $js = array('/*{{ZIN_PAGE_JS}}*/', data('pageJS'));
- $imports = $context->getImports();
- $webRoot = $app->getWebRoot();
- $themeName = $app->cookie->theme;
- $zuiPath = $config->zin->zuiPath;
- $pageID = $jsConfig->currentModule . '-' . $jsConfig->currentMethod;
- $zinMode = isset($config->zin->mode) ? $config->zin->mode : '';
- $jsConfig->zin = !empty($zinMode) ? $zinMode : true;
- $jsConfig->maxUploadSize = ini_get('upload_max_filesize');
- $headImports = array();
- $headImports[] = h::favicon($webRoot . 'favicon.ico');
- $headImports[] = h::jsVar('window.config', $jsConfig, setID('configJS'));
- if($zui)
- {
- $headImports[] = h::importCss($zuiPath . 'zui.zentao.css', setID('zuiCSS'));
- $headImports[] = h::importCss($zuiPath . 'themes/' . $themeName . '.css', setID('zuiTheme'));
- $headImports[] = h::importJs($zuiPath . 'zui.zentao.js', setID('zuiJS'));
- $headImports[] = h::jsCall('$.setLibRoot', $zuiPath);
- $extraCSS = isset($config->zin->extraCSS) ? $config->zin->extraCSS : '';
- if(!empty($extraCSS)) $headImports[] = h::importCss($webRoot . 'js/zui3/' . $extraCSS);
- }
- if($config->debug)
- {
- $zinDebugData = array('config' => jsRaw('window.config'));
- if($config->debug > 4)
- {
- $zinDebugData['zinTool'] = isset($config->zinTool) ? $config->zinTool : false;
- if($config->debug > 5)
- {
- $zinDebugData['page'] = $this->toJSON();
- $zinDebugData['definedProps'] = wg::$definedPropsMap;
- $zinDebugData['wgBlockMap'] = wg::$blockMap;
- }
- }
- $headImports[] = h::js('window.zin = ' . js::value($zinDebugData) . ';');
- }
- else
- {
- $headImports[] = h::js('window.zin = {};');
- }
- if($setXuanClass) $headImports[] = h::importCss($config->webRoot . 'zentaoclient.css', setID('zentaoclient'));
- if($zui)
- {
- $extraJS = isset($config->zin->extraJS) ? $config->zin->extraJS : 'zin.js';
- if(!empty($extraJS)) $headImports[] = h::importJs($webRoot . 'js/zui3/' . $extraJS);
- array_unshift($js, 'zui.defineFn();');
- }
- $currentLang = $this->props->get('lang');
- if(empty($currentLang)) $currentLang = $app->getClientLang();
- return h::html
- (
- before(html('<!DOCTYPE html>')),
- set($attrs),
- set::className("theme-$themeName", $this->prop('class')),
- set::lang($currentLang),
- $setXuanClass,
- h::head
- (
- html($metas),
- h::title(html(html_entity_decode($title))),
- $this->block('headBefore'),
- $headImports,
- $head
- ),
- h::body
- (
- set($bodyProps),
- set::className($bodyClass),
- $setXuanClass,
- empty($imports) ? null : h::import($imports),
- h::css($css, setClass('zin-page-css'), setData('id', $pageID)),
- $body,
- $rawContent ? rawContent() : null,
- $hookContent ? hookContent() : null,
- h::js($js, setClass('zin-page-js'), setData('id', $pageID))
- )
- );
- }
- }
|