1

この質問は良いアドバイスを提供するほどのサポートではないため、ここでより実用的な質問をすることが許されるかどうかはわかりません.

デフォルト(または指定されている場合はカスタム)html「レイアウト」またはスケルトンを効果的にロードし、ユーザーのページ要求に基づいて、別のファイルを挿入する単純なレイアウトマネージャー(より適切な用語の欠如)を備えたフロントコントローラーがあります(ビュー ファイルと呼ばれる) をスケルトン コンテンツ領域に追加します。

スケルトンは次のようになります。

<div id="header">
    <h1>head goes here</h1>
<div id="content">
    <?php $this->insertContent(); ?>
</div>
<div id="footer">
    <p>footer goes here</p>
</div>

非常に単純ですが、これにより将来の更新が容易になります。クライアントが jquery スクローラーを追加したい場合、同じことを達成するために複数のドキュメントを編集する必要がないように、単一のレイアウトに追加できるからです。

しかし、私の友人は、これは良い解決策ではないと考えており、「ビュー」ファイルとレイアウトを分割するのではなく、フロントコントローラーに固執し、html ページで php インクルード (ヘッダーとフッターを含める) を使用する必要があると信じています。次の理由により、HTML ページを 1 つのファイルとして保持します。

  1. 単一のレイアウトにバインドしているため、レイアウト マネージャーを使用すると、アプリケーションの柔軟性が低下します (新しいレイアウトを作成し、ページ コントローラー ファイルで別のレイアウトを使用するように指定しない限り)。
  2. 他の開発者はロジックを理解するのに苦労するだろうし、私は必要以上の作業を作成している
  3. 単純な HTML 開発者は、HTML ドキュメント全体と同じようにスニペットでしか実際に作業できず、全体像を見ることができないため、適切なテストを行うことができません。
  4. ページに変更を加えるには、ビュー ファイルまたはスケルトン ファイルのいずれかで修正を加える必要があり、スケルトン ファイルをいつ編集するかを知る必要があるため、さらに混乱します。

私はすぐに、複数の開発段階を持つプロジェクトの開発を開始します。アプリケーションをできるだけ柔軟にし、作成する作業をできるだけ少なくしたいだけでなく、ビルドも行うため、これについて決定を下すことが重要です。サイトに修正、改善、または変更を簡単に加えることができるようにします。この議論は現在、2人の個人の意見に基づいているため、アドバイスをいただければ幸いです。考慮すべき点と、より大きなメインストリーム フレームワークと CMS の機能についての情報も、より良い決定を下すのに役立ちます。

4

4 に答える 4

3

あなたがすることは、いわゆるTwo Step View Patternです。

これは一般的なパターンであり、そのように文書化すると、開発者が簡単に理解できるようになります。

すべてのパターンには長所と短所があります。Fowler の本の該当する章を読んで、適切な紹介と、自分の考えを立てるためのベースを取得することをお勧めします。

レイアウトという用語はより広義ですが、開発者もよく理解していますが、それほど正確ではありません。

于 2011-11-19T10:48:18.100 に答える
1

Zend_Layoutは、レイアウト管理に必要な唯一のものであり、非常に役立ちます。

ただし、独自のものを非常に簡単に実装できます。このようなもの:

<?php

class Layout
{

    private $_data = array();

    public function __set($name, $value)
    {
        $this->_data[$name] = $value;
    }

    public function __get($name)
    {
        return array_key_exists($name, $this->_data) ? $this->_data[$name] : NULL;
    }

    public function __isset($name)
    {
        return isset($this->_data[$name]);
    }

    public function __unset($name)
    {
        unset($this->_data[$name]);
    }

}

// Usage

$layout = new Layout();

$layout->title = 'Welcome to my application mate!';

$layout->content = load_content_from_template('template_file.php');

$layout->scripts = array(
    'jquery',
    'jquery.plugin'
);

$layout->scripts[] = 'common';

?>

// Inside the layout file, assuming that $layout variable is available in this scope.

<html>
<head>
    <title><php echo $layout->title ?></title>
</head>
<body>

    <div id="content">
        <php echo $layout->content ?>
    </div>

    <?php
        foreach ($layout->scripts AS $script)
            echo '<script type="text/javascript" src="/path/to/scripts/directory/' . $script . '.js"></script>';
    ?>

</body>
</html>
于 2011-11-19T11:20:25.333 に答える
-1

Smarty をご覧ください。

http://www.smarty.net/

WordPress は、私自身の CMS と同様に、Smarty の変種を使用しています。他の大規模なCMSはSmartyまたは同じことを行う代替手段を使用していると確信しています

于 2011-11-19T10:39:20.240 に答える