lorenzosanzari / mozaiku

简单的 PHP 模板继承类

v1.0.1 2020-01-18 22:48 UTC

This package is auto-updated.

Last update: 2024-09-19 09:21:20 UTC


README

Mozaiku logo

Mozaiku

简单的 PHP 模板继承

受多个层次模板引擎(如 Twig 或 Blade)的启发,Mozaiku 允许您使用简单的 纯 PHP 语言构建层次模板。它是一个非常简单且轻量级的类,具有非常小的内存占用。

许可证

Mozaiku 在 MIT 许可证下发布。

通过 Composer 安装

如果您正在使用 Composer,您可以运行以下命令

composer require lorenzosanzari/mozaiku

或者您可以直接从 Github 下载 zip 文件,并将其解压缩到您的网页目录中。

模板继承

什么是模板继承?模板继承是制作和组合可重用 HTML 布局的优雅方式。它比传统的“包含”(不良)做法(如包含头部和尾部文件)更强大。

使用 Mozaiku,您可以使用纯 PHP 语言简单地实现模板继承。无需学习另一种模板语言。

有一个主模板,您可以概念化地定义一个“子”视图,它扩展主布局。这意味着它将具有与布局相同的总体外观,但将用其自己的内容重新定义一些部分。换句话说,在子视图中,您只需重新定义与主题相关的部分(部分覆盖)即可,整个页面将继承“父”主题的所有其他内容。

部分

在一个布局中,您可以通过编写以下内容来定义一个新的部分

<?php $this->section('menu'); ?>
     Menu section content ...
<?php $this->endsection(); ?>

部分也可以嵌套,以便更详细地管理要覆盖的内容。在同一个布局中,不能定义多个具有相同名称的部分。

父部分内容

在一个部分中,您不仅可以插入新的内容,还可以通过以下指令调用父布局中相同部分的同名内容

<?php $this->section('title'); ?>

    Child title content
    <?php $this->parentContent(); //parent 'title' section content ?>

<?php $this->endsection(); ?>

扩展父布局

示例

<!-- theme.php -->
<!DOCTYPE html>
<html>
    <head>
        <title>Mozaiku example theme</title>
    </head>
    <body>
            <?php $this->section('title'); ?>
                Theme title content
            <?php $this->endsection() ?>
            
            <div id='article'>
                <?php $this->section('article') ?>
                	This is the content of theme article body.
                <?php $this->endsection() ?>
            </div>
      </body>
</html>


<!-- page.php -->
<?php $this->extendsView('views/theme.php'); ?>
<?php $this->section('article') ?>
    	This is a modified article body overridden by page.php.
<?php $this->endsection() ?>

警告:必须在子页面的开始处放置 $this->extendsView('my_parent_view.php') 指令!

使用 Mozaiku 渲染 'page.php',您将获得以下输出

<!DOCTYPE html>
<html>
    <head>
        <title>Mozaiku example theme</title>
    </head>
    <body>
            Theme title content
                       
            <div id='article'>
                This is a modified article body overridden by page.php.
            </div>
      </body>
</html>

如果您在模板中只想显示由子视图填充的部分内容的显示,您可以简单地编写

<?php $this->showsection('my_section'); ?>

在布局中包含部分视图

您可以在布局的某个部分(或任何点,如果您的视图不是子视图)中包含一些部分视图,只需编写

<?php $this->includeView('views/my_partial.php', $data); ?>

渲染或捕获输出

render() 函数

$mozaiku = new Mozaiku();
$data = [
	//view data array...
];
$output = $mozaiku->render('page.php', $data, $return);

允许您显示最终输出,并将内容捕获到变量(字符串)中。如果第三个参数(例如 $return)等于 true,则 $output 将包含从处理过的视图输出的所有内容。

内容堆栈

Mozaiku 允许您将内容推送到命名堆栈,您可以在布局的某个点渲染它们。这对于注入 JavaScript 或 CSS 标签或子视图所需的脚本非常有用。

<!-- Stack use example -->
<?php $this->push('head'); ?>
<style>
    body {font-size: 1.3em;color: #999;font-family: "Trebuchet MS",Verdana,Arial,sans-serif;}
    body a {color: #595 !important;}
    #title {font-size: 36px;}
    #menu {text-align: right; width: 100%;}
    #article, #footer {margin-top: 35px; border: 1px solid #aaa;padding: 15px 25px 15px 25px;}
    #title, #footer {text-align: center;width: 100%;}
</style>
<?php $this->endpush(); ?>

渲染堆栈:在您的 HTML 布局中

<?php $this->stack('head'); ?>

调试和严格模式

您可以使用 Mozaiku 的调试模式来显示与部分覆盖内部堆栈状态相关的调试信息。

$mozaiku = new Mozaiku();
$mozaiku->debug = true; //debug mode

严格模式将向您提供有关在视图中编写内容的最佳方式的错误消息。

$mozaiku->strict_mode = true; //strict mode 

有关任何进一步的疑问,请参阅项目中包含的示例文件。:-)