/home/techb158/public_html/wp-content/plugins/kirki/libraries/framework/View
NameSizeModeActions
layout-wrapper.php10150644editdlrm
TemplateEngine.php83940644editdlrm
View.php28540644editdlrm
ViewContext.php55550644editdlrm
Edit: /home/techb158/public_html/wp-content/plugins/kirki/libraries/framework/View/TemplateEngine.php (8394B)
shared[$key] = $value; } /** * Get data shared with all views. * * @return array * * @since 2.1.2 */ public function get_shared() { return $this->shared; } /** * Render a view template to a string. * * @param string $view The view name in dot notation. * @param array $data The data to pass to the view. * @param bool $layout Whether to wrap with theme header/footer. * * @return string * * @since 1.0.0 */ public function render(string $view, array $data = [], bool $layout = \true) { $path = $this->resolve_path($view); if ($path === '') { throw new RuntimeException(\sprintf('View [%s] not found.', $view)); } $merged = \array_merge($this->shared, $data); $context = app(ViewContext::class); $context->push(['template' => $view, 'route_name' => '', 'resolved_path' => $path, 'data' => $merged]); try { $content = $this->render_file($path); if (!$layout) { return $content; } return $this->wrap_layout($content); } finally { $context->pop(); } } /** * Resolve a view name to an absolute file path. * * @param string $view The view name in dot notation. * * @return string Absolute path or empty string when not found. * * @since 1.0.0 */ public function resolve_path(string $view) { $relative = $this->normalize_template_name($view) . '.php'; if (\function_exists('locate_template')) { $theme_path = locate_template('views/' . $relative); if ($theme_path !== '') { return apply_filters('framework/view/path', $theme_path, $view); } } $base_path = app()->view_path(); $candidate = \rtrim($base_path, '/\\') . '/' . $relative; $resolved = \realpath($candidate); $base_real = \realpath($base_path); if ($resolved === \false || $base_real === \false || \strpos($resolved, $base_real) !== 0) { return apply_filters('framework/view/path', '', $view); } if (!\is_file($resolved) || !\is_readable($resolved)) { return apply_filters('framework/view/path', '', $view); } return apply_filters('framework/view/path', $resolved, $view); } /** * Normalize a template name into a relative path without extension. * * @param string $template Template name or relative path. * * @return string * * @since 1.0.0 */ public function normalize_template_name(string $template) { $template = \preg_replace('/\\.php$/i', '', \trim($template)); return \str_replace('.', '/', $template); } /** * Check if the current theme is a block theme. * * @return bool * * @since 1.0.0 */ public function is_block_theme() { return \function_exists('wp_is_block_theme') && wp_is_block_theme(); } /** * Render a PHP template file without extracting data into local variables. * * Templates must read data via view_data(). * * @param string $path Absolute template path. * * @return string * * @since 1.0.0 */ protected function render_file(string $path) { \ob_start(); // phpcs:ignore Framework.NamingConventions.SnakeCaseVariable.NotSnakeCase (static function ($__path) { // phpcs:ignore Framework.NamingConventions.SnakeCaseVariable.NotSnakeCase require $__path; })($path); return (string) \ob_get_clean(); } /** * Wrap rendered content with theme header and footer. * * Assembles HTML as a string. Dynamic view data must be escaped in templates * before it becomes part of $content. * * @param string $content The view content. * * @return string * * @since 1.0.0 */ public function wrap_layout(string $content) { return $this->render_header() . $content . $this->render_footer(); } /** * Render the theme header for classic or block themes. * * @return string * * @since 1.0.0 */ public function render_header() { if ($this->is_block_theme()) { $this->block_header = do_blocks(\sprintf('', esc_attr(get_stylesheet()))); $this->block_footer = do_blocks(\sprintf('', esc_attr(get_stylesheet()))); \ob_start(); ?> > >
block_header; } \ob_start(); get_header(); return (string) \ob_get_clean(); } /** * Render the theme footer for classic or block themes. * * @return string * * @since 1.0.0 */ public function render_footer() { if ($this->is_block_theme()) { \ob_start(); wp_footer(); $footer_scripts = (string) \ob_get_clean(); return $this->block_footer . '
' . $footer_scripts . ''; } \ob_start(); get_footer(); return (string) \ob_get_clean(); } /** * Include a view template file directly (without capturing output). * * @param string $view The view name in dot notation. * @param array $data The data to pass to the view. * @param bool $once Whether to load the template only once. * * @return void * * @throws RuntimeException When the view cannot be resolved. * * @since 1.0.0 */ public function include(string $view, array $data = [], bool $once = \true) { $path = $this->resolve_path($view); if ($path === '') { throw new RuntimeException(\sprintf('View [%s] not found.', $view)); } $merged = \array_merge($this->shared, $data); $context = app(ViewContext::class); $context->push(['template' => $view, 'route_name' => '', 'resolved_path' => $path, 'data' => $merged]); try { if ($once) { require_once $path; return; } require $path; } finally { $context->pop(); } } /** * Absolute path to the framework layout wrapper stub. * * @return string * * @since 2.1.2 */ public function layout_wrapper_path() { return \dirname(__FILE__) . '/layout-wrapper.php'; } }