0

目前我有一个基于传统的非 MVC php 框架,我需要对其进行更新以支持水平/功能系统。

我想要两种模式,一种是普通模式(当前模式),另一种是基于关卡的模式,我可以控制包含哪些功能——低、中、高级。

例如,低层将不支持谷歌地图,而中层和高层将支持。层之间的布局也有所不同,因此除了我当前的模板之外,我还必须为每一层提供一个模板主文件。

而关卡模式中的高层和当前模式的区别在于,高层中包含了某些东西,但当前模式中的功能是无限的(基于非关卡)。

目前系统架构布局如下:

templates/
    default.php

includes/
    branding.php
    css.php
    js.php
    map.php ( google map )

如果您访问index.phpcontact.php它只是做一个require_once APP_PATH . 'templates/default.php'

我知道这不是最理想的环境类型,因为它不是基于 MVC 的,但这就是我坚持使用 ATM 的原因。

templates/default.php看起来像:

<!doctype html>
<html>
<head>
    <?php include APP_PATH . 'includes/branding.php';
</head>
<body>
    <?php
    switch ( filename ) {
        case 'map':
        include APP_PATH . 'includes/map.php';
    }
    ?>

<?php
include APP_PATH . 'includes/google.php';
?>
</body>
</html>

所以一个相当老派类型的模板文件。

为了支持调平系统,我怀疑我必须将我的框架结构更改为类似..

templates/
    level-0.php
    level-1.php
    level-2.php
    level-3.php

includes/
    branding.php
    css.php
    js.php

现在在我的配置文件中,我必须定义一些常量,例如..

define('LEVEL', 1);
define('TEMPLATE_FILE', APP_PATH . 'templates/level-' . LEVEL . '.php');

default.php对于基于层的level-0.php模板,它们分别是 1、2、3。

所以现在当我访问一个页面时,index.phpcontact-us.php会包含TEMPLATE_FILE常量:

require_once TEMPLATE_FILE

- 这是理想的吗?有什么缺点吗?

如果我采用这种方法,我将有 4 个单独的模板文件,这很好。因此,例如,最低层将不包括map包含,而最高层将。

我关心的另一个问题是子分支,是否可以在包含文件中进行分支?一个例子是最低层没有网站图标。favicon 元素位于 中includes/css.php,因此我必须在该文件中进行分支:

包括/css.php:

<link rel="stylesheet" type="text/css" href="main.css">
<?php if ( LEVEL !== 1 ) { ?>
<link rel="shortcut icon" href="favicon.ico">
<?php } ?>

- 这可能会有点混乱,但它使我免于到处复制 css.php 并不得不更新它的 4 个实例。这是理想的吗?

我为加载的问题道歉,感谢任何建议。

4

1 回答 1

1

这对我来说看起来很乱,我想知道你为什么要以这种“练级”的方式进行。因为对我来说它看起来像 4 个显示级别,1 是最少的,4 是最多的。

如果你问用什么框架来代替你拥有的框架,任何一个都可以(有很多 PHP 框架,做一个搜索,我最喜欢的是 codeigniter.com)

还以 CSS 为例,我很困惑为什么你会费心去做像 favicon 这样微不足道的事情(但我当然可以看到你的每个显示级别的选择性 CSS 的例子)。

但是我只需要一个 CSS 文件(或分解为 4 组:general、lev1,2 等;)然后包含并合并到一个 CSS 中。

但是当你一针见血的时候,它会变得一团糟,我会把内容分开,或者更好的是,坐下来重新编写整个项目,看看问题出在哪里,你似乎已经确定了一些自己,尝试先写出项目,然后在对项目范围感到满意后对其进行编程。

否则,我不建议在没有明确行动方案的情况下开始编程。

希望有帮助

于 2009-11-25T17:14:47.963 回答