現在、レベリング/機能システムをサポートするために更新する必要があるレガシーベースの非 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 つのインスタンスを更新する必要がなくなります。これは理想的ですか?
負荷の高い質問で申し訳ありませんが、アドバイスをいただければ幸いです。