title = $title; $this->lang = $lang; } public function setTheme(string $theme): self { $this->theme = $theme; return $this; } public function getTheme(): string { return $this->theme; } /** * Add path to css file to render in page head. */ public function addCssFile(string $css_file): self { $this->css_files[$css_file] = $css_file; return $this; } /** * Add css style to render in page head. */ public function addStyle(string $style): self { $this->styles[] = $style; return $this; } /** * Add JavaScript to render in page head before js file includes are rendered. */ public function addJavaScript(string $js): self { $this->js[] = $js; return $this; } /** * Add path to js file to render in page head. */ public function addJsFile(string $js_file): self { $this->js_files[$js_file] = $js_file; return $this; } public function addJsTranslationStrings(array $translations_strings): self { foreach ($translations_strings as $orig_string => $string) { $this->addJavaScript('locale[\''.$orig_string.'\'] = '.json_encode($string, JSON_THROW_ON_ERROR).';'); } return $this; } /** * Show page head html. */ public function show(): CHtmlPageHeader { echo ''; echo (new CTag('html')) ->setAttribute('lang', $this->lang) ->setAttribute('theme', $this->theme); echo << HTML; echo (new CTag('title', true))->addItem($this->title); echo << HTML; foreach ($this->css_files as $path) { if (parse_url($path, PHP_URL_QUERY) === null) { $path .= '?'.(int) filemtime($path); } echo (new CTag('link')) ->setAttribute('rel', 'stylesheet') ->setAttribute('type', 'text/css') ->setAttribute('href', $path); } if ($this->styles) { echo ''; } if ($this->js) { echo ''; } foreach ($this->js_files as $path) { if (parse_url($path, PHP_URL_QUERY) === null) { $path .= '?'.(int) filemtime($path); } echo (new CTag('script', true))->setAttribute('src', $path); } echo ''."\n"; return $this; } }