退出Smarty手动完成

Lim*_*mon 13 html php extends smarty include

我面临的问题是,我不确定如何在没有框架或模板引擎的情况下开发.我开始编码,现在我想去基础.

我曾经使用过这个MVC架构,使用Codeigniter和Smarty作为模板引擎.我现在要做的是使用原始的PHP而不提及这两种工具.

我不知道如何"复制"Smarty的"块"和"扩展"的概念.

我曾经定义了一个base.tpl文件,它有html头,只有body标签,以及基本css和js文件(在网站的每个页面中总是使用的文件),如下所示:(片段)

 <!DOCTYPE html>
 <head>
 <meta charset="utf-8" />
 <title>Dashboard</title>
 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport" />
 <meta content="" name="description" />
 <meta content="" name="author" />

 <!-- ================== BEGIN BASE CSS STYLE ================== -->
 <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
 <link href="{site_url()}assets/css/animate.min.css" rel="stylesheet" />
 <!-- ================== END BASE CSS STYLE ================== -->

 <!-- ================== BEGIN PAGE LEVEL CSS STYLE ================== -->
 {block name='custom_css'}{/block}
 <!-- ================== END PAGE LEVEL CSS STYLE ================== -->

 <!-- ================== BEGIN BASE JS ================== -->
 <script src="{site_url()}assets/plugins/pace/pace.min.js"></script>
 <!-- ================== END BASE JS ================== -->
</head>
<body>
  <div id="page-container" class="fade page-sidebar-fixed page-header-fixed">
    <div id="header" class="header navbar navbar-default navbar-fixed-top">
        <div class="container-fluid">
            {include file='base/header.tpl'}
        </div>
    </div>
    <!-- BEGIN PAGE -->
    <div class="page-content">
        <!-- BEGIN PAGE CONTAINER-->
        <div class="container-fluid">
            <!-- BEGIN PAGE HEADER-->
            <div class="row-fluid">
                <div class="span12">                        
                    <!-- BEGIN PAGE TITLE & BREADCRUMB-->
                    {include file='admin/base/breadcrumb.tpl'}
                    <!-- END PAGE TITLE & BREADCRUMB-->
                </div>
            </div>
            <!-- END PAGE HEADER-->
            {block name='content'}{/block}
        </div>
        <!-- END PAGE CONTAINER-->    
    </div>
    <!-- END PAGE -->
Run Code Online (Sandbox Code Playgroud)

然后当我需要调用这个base.tpl时我做了这个:

{extends file='base/base.tpl'}

{block name='custom_css}
   <link href="{site_url()}assets/css/pages/blog.css" rel="stylesheet" type="text/css"/>
 {/block}

{block name='content'}
   <div class="row">
      <div class="col-md-3 col-sm-6">
        <div class="widget widget-stats bg-green">
        <div class="stats-icon stats-icon-lg"><i class="fa fa-globe fa-fw"></i></div>
        <div class="stats-title">TODAY'S VISITS</div>
        <div class="stats-number">7,842,900</div>
        <div class="stats-progress progress">
            <div class="progress-bar" style="width: 70.1%;"></div>
        </div>
        <div class="stats-desc">Better than last week (70.1%)</div>
      </div>
   </div>
Run Code Online (Sandbox Code Playgroud)

我一直在寻找,但我很害怕我错过了正确的搜索词,因为我找不到答案.

我想得到指导!

Ant*_*son 0

我不确定它有多聪明,而且我自己实际上从未使用过模板引擎。但也许这就是它的做法。

假设我们有:

index.php
page.php
template.php
Run Code Online (Sandbox Code Playgroud)

当我们转到index.php时,它可以启动并输出缓冲区并包含page.php。在包含之后,捕获输出缓冲区并使用一些正则表达式来匹配并在其中找到块并将它们放入变量中。

现在对 template.php 执行相同的操作,找到其中的所有块,并将这些块替换为 page.php 中找到的块。

我实际上并不认为模板引擎就是这样做的。但这是一种可能的方式。