基于级别/层的框架的策略

时间:2009-11-25 16:53:50

标签: php frameworks web-frameworks

目前我有一个基于遗留的非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。 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个实例。这是理想的吗?

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

1 个答案:

答案 0 :(得分:1)

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

如果你问的是用什么框架替代你所拥有的框架,那么任何框架都可以工作(有许多PHP框架,做搜索,我的收藏是codeigniter.com)

另外以CSS为例,我很困惑你为什么要做像favicon这样无关紧要的事情(但我肯定能看到你的每个显示级别的选择性CSS的例子)。

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

但是当你敲击头部时,它会变得凌乱,我只是分开内容,或者更好的是,坐下来重新编写整个项目,看看问题将会发生在哪里,你似乎要自己确定一些,先尝试写出项目,然后在对项目范围感到满意后再编程。

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

希望有所帮助

相关问题