所以我一直在研究模板引擎以及如何创建自己的简单模板引擎。从纯粹的学习角度来看,我在这里阅读了其中的几个。
使用上面链接中提到的类的一个小修改版本,我想测试它但遇到了一个问题。
当为内部 HTML 调用同一模板类的实例,然后将其作为 var/value 对分配给父实例时,我无法访问 HTML(子对象)中的主要父级变量。
令人困惑?
也许下面的代码会有所帮助。
因此,如果我这样实例化模板(模板类与上面链接中提到的相同)-
$_page = new tplEngine();
$_page->load(TPLFILES_DIR . "/root.php");
然后将 header.html 实例化为 tplEngine 类的新实例,并将其作为变量分配给第一个实例,如下所示 -
$_header = new tplEngineChild(TPLFILES_DIR . "/common/header.html");
$_page->set("header", $_header->parse());
在哪里...
root.php
---------------
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<title><?php print $this->title; ?></title>
<meta name="keywords" content="<?php print $this->meta_keywords; ?>" />
<meta name="description" content="<?php print $this->meta_description; ?>" />
<?php foreach($this->styles as $stylepath) : ?>
<link rel="stylesheet" type="text/css" href="<?php print $stylepath; ?>" />
<?php endforeach; ?>
</head>
<body>
<div class="body-wrap">
<div class="header">
<?php print $this->header; ?>
</div>
<div class="content-wrap">
<?php var_dump($this->mid_content); ?>
</div>
<div class="footer">
<?php print $this->footer; ?>
</div>
</div>
</body>
</html>
和
header.html
-----------------
<div class="mainHeader">
<div class="logo">
webTrack.in'
</div>
<div class="dashboard">
<?php if($this->get(isLoggedIn) == false) : ?>
<p class="greeting">Hello <span class="username"><?php echo this->username; ?></span></p>
<a class="logout">logout</a>
<?php else : ?>
<p class="greeting">Hello <span class="username"><?php echo $this->username; ?></span></p>
<p><a onclick="showLogin()">Login</a></p>
<form id="loginForm" class="login form" action="" method="post">
<input type="text" name="username" value="Username" />
<input type="password" name="password" value="Password" />
</form>
<?php endif; ?>
</div>
</div>
<nav>
<ul class="headerNav">
<li><a href="/">Home</a></li>
<li><a href="/pricing">Plans and Pricing</a></li>
<li><a href="/aboutUs">About Us</a></li>
</ul>
</nav>
(在上述情况下$this->get(isLoggedIn)
,并且this->username
是分配给 $_page 实例的变量)我遇到了一个问题,在 header.html 文件中,我无法访问在 tplEngine 类的 $_page 实例下设置的变量。
解决这个问题的最佳方法是什么?
$_page
当我在 header.html中将实例设置为全局时,一切正常。但这是正确的做法吗?