我只是非常缓慢地开始沉迷于面向对象的编程,所以请对我温柔一点。
我有一个部分借用的 Smarty 自定义类。这是唯一的示例如何反映在我当前的项目中使用它的基本思想:
class Template {
function Template() {
global $Smarty;
if (!isset($Smarty)) {
$Smarty = new Smarty;
}
}
public static function display($filename) {
global $Smarty;
if (!isset($Smarty)) {
Template::create();
}
$Smarty->display($filename);
}
然后在PHP中,我根据上面的例子,使用下面的方式来显示模板:
Template::display('head.tpl');
Template::display('category.tpl');
Template::display('footer.tpl');
我制作了以下代码示例(见下文)普遍适用,因此我不会在每个 PHP 文件中一直重复上述行(见前 3 行)。
我只想设置,例如:
Template::defauls();
这将加载:
Template::display('head.tpl');
Template::display('template_name_that_would_correspond_with_php_file_name.tpl');
Template::display('footer.tpl');
如您所见Template::display('category.tpl');
,将始终根据 PHP 文件进行更改,其名称与模板名称相对应,这意味着,例如,如果命名 PHP 文件,stackoverflow.php
那么它的模板将是stackoverflow.tpl
.
我已经尝试过运行良好的解决方案,但我不喜欢它的外观(它的结构方式)。
我所做的是:
- 在 config 中分配一个 var 并调用它
$current_page_name
(即派生当前 PHP 页面名称,如下所示:)basename($_SERVER['PHP_SELF'], ".php");
,它返回,例如:category
。 - 在我使用的 PHP 文件中
Template::defaults($current_page_name);
- 在我的自定义 Smarty 类中,我添加了以下内容:
public static function defaults($template) {
global $Smarty;
global $msg;
global $note;
global $attention;
global $err;
if (!isset($Smarty)) {
Templates::create();
}
Templates::assign('msg', $msg);
Templates::assign('note', $note);
Templates::assign('attention', $attention);
Templates::assign('err', $err);
Templates::display('head.tpl');
Templates::display($template . '.tpl');
Templates::display('footer.tpl');
}
有没有办法让它更简洁和结构良好?我知道代码审查,但我希望你们好好看看它。