0

現在、レベリング/機能システムをサポートするために更新する必要があるレガシーベースの非 MVC php フレームワークがあります。

通常モード (現在のモード) と、含まれる機能を制御するレベル ベース モード (低層、中層、高層) の 2 つのモードが必要です。

たとえば、低層では Google マップがサポートされませんが、中層および高層ではサポートされます。階層によってレイアウトも異なるため、現在のテンプレートに加えて、階層ごとにテンプレート マスター ファイルを用意する必要があります。

また、レベル モードの上位層と現在のモードには違いがあります。上位層には特定のものが含まれていますが、現在のモード (非レベル ベース) には無制限の機能があります。

現在、システム構造は次のようにレイアウトされています。

templates/
    default.php

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

あなたが訪問するindex.phpか、contact.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.phpまたはのようなページにアクセスすると、次の定数contact-us.phpが含まれます。TEMPLATE_FILE

require_once TEMPLATE_FILE

――これが理想ですか?欠点はありますか?

この方法を使用すると、4 つの個別のテンプレート ファイルが作成されますが、それで問題ありません。したがって、たとえば、最下位層にはインクルードが含まれませんが、map最上位層には含まれます。

私が懸念しているもう 1 つの問題は、サブ分岐です。インクルード ファイル内で分岐しても問題ありませんか? たとえば、最下位層にはファビコンがありません。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 を例として見てみると、ファビコンのように取るに足らないことをわざわざ行う理由がわかりません (ただし、表示レベルごとに選択的な CSS の例を見ることはできます)。

しかし、CSS ファイルを 1 つだけ (または 4 つのセットに分割: 一般、lev1、2 など) してから、1 つの CSS に含めてマージします。

しかし、あなたが頭に釘を打つと、それは厄介になるでしょう、私はただコンテンツを分離するか、座ってこのプロジェクト全体を書き直します.問題がどこにあるのかを見てください.最初にプロジェクトを書き出してみて、プロジェクトの範囲に満足したらプログラムします。

そうでなければ、明確な行動方針なしにプログラミングを始めることはお勧めしません。

それが役立つことを願っています

于 2009-11-25T17:14:47.963 に答える