5

私は php にかなり慣れていないので、ページを整理し、PHP を使用してページを配信する最良の方法を決定しようとしています。私が持っていた2つの(基本的な)アイデアは次のとおりです。

  • ヘッダー、フッター、およびメニューを含むすべての PHP インクルードを含む個々のページの束。

  • メイン コンテンツのインクルードと共に、メニュー、ヘッダー、およびフッターを含む 1 つのメイン ページ。ページ名は、URL の変数から取得されます。

他に提案やアイデアはありますか?これはかなり基本的なものですが、誰かがより良いアイデアを持っているかどうかを確認したいと思います.

ありがとう

4

9 に答える 9

6

私は以前に両方の方向に行きました。どちらにも長所と短所がありますが、レイアウトを含む単一のメインページである 2 番目のオプションに傾倒しています。これは、デスクトップ パブリッシング アプリケーションでマスター ページがどのように機能するかに似ています。ASP.NET は、このアイデアを適切に実装しています。テクノロジを切り替える必要があると言っているわけではありません。

ただし、このルートを使用する場合は、URL のクエリ文字列ではなく、mod_rewrite を使用してパスを PHP マスター ページに取得します。.htaccess ファイルには次のようなものが含まれている必要があります。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [S=1]
RewriteRule ^(.*)$ /index.php?path=$1 [QSA]

これは基本的に、クエリ文字列変数に URL パスを指定して index.php に 404 エラー ハンドオフ処理を与える代わりに、彼らが要求するファイルが存在しないかどうかを示します。したがって、「http://example.com/path/to/page」は、 $_GET['path'] が「/path/to/page」に設定された index.php にヒットすることになります。そこから、データベースやフラット ファイルなどからコンテンツを取得できます。要求されたパスに基づいて、さまざまなテンプレートを選択することもできます。

于 2009-01-27T21:56:54.097 に答える
2

なぜ正しい方向に半分しか行かないのですか?既存の MVC フレームワークの 1 つを使用します。これらは、コードを構造化する強力なツールであり、おそらくどのカスタム ソリューションよりも優れています。MVC を選択し、ビジネス ロジックをプレゼンテーション ロジックおよびデータ構造から分離する方法を学び、潜在的な従業員としての雇用市場での価値を高め、時間を節約して幸せになりましょう。

Kohana PHP は学習曲線が緩やかであるため、おそらく開始する必要があります (ただし、それだけに限定されません)。

于 2009-01-28T10:48:38.237 に答える
2

ヘッダーなどのインクルードを含む個々のページが好きです。

元の開発者が URL に変数を含む 1 つのページを使用していた Web サイトを維持する必要があり、面倒です。新しい同様のページを追加する以外の変更を行うことは困難です. 彼はフレームも使用していましたが、それも問題の一部である可能性があります.

于 2009-01-27T21:49:04.550 に答える
2

これら 2 つの選択肢がある場合、私は 2 番に進みます。サイトが適切なフレームワークが必要なレベルにまで成長した場合は、include('header.php'); のすべてを使用せずに単一のページを移動します。物事ははるかに簡単になります。ボーナス ポイントとして、db アクセスと表示ロジックをそれぞれ配置するモデル フォルダとビュー フォルダを使用すると、真の MVC 環境への道のりの半分になります。

編集して追加 - 条件付きインクルードを含む単一のインデックスは、セキュリティ上非常に価値のある単一のエントリ ポイントをアプリに提供します。

于 2009-01-27T21:50:09.803 に答える
1

PHPの主な点は、 「プレゼンテーションとプログラムロジックを分離しておく」必要があるということです。つまり、ビジネスや処理ロジックを実行するスクリプトの途中で、画面に html をエコーし​​ないようにしてください。

2番目の解決策は、問題に対するかなり一般的な(そして悪くない)解決策です。これにより、すべてのレイアウト情報を含む単一のページを作成し、レンダリングする特定のページ コンテンツを含めることができます。レイアウト テンプレートの大部分をあるページから次のページに交換する必要がある場合、これは明らかにうまく機能しません。その場合、最初のソリューションがうまく機能します。

最後に、 Zend FrameworkSymfony、またはCakePHPなどのさまざまな PHP フレームワークを調べて、それらがすべてこの問題をどのように処理しているかを確認することを強くお勧めします。気に入ったものが見つかったら、それを使用してください。それ以外の場合でも、独自のサイトを構築する方法について優れたアイデアが得られる可能性があります。

于 2009-01-27T21:52:34.090 に答える
0

それは本当にあなたがデザインしているウェブサイトに依存します. コンポーネントを再利用したい場合は、インクルードを使用したアプローチが機能します。一種のマスターページを作成して、その中に必要なページをレンダリングするだけです

于 2009-01-27T21:47:55.567 に答える
0

メニューとヘッダーを header.php に、フッターや sopyright などを footer.php に配置すると、作業がずっと楽になります。次に、作成する各ページにそれらのファイルを含めるだけです。

于 2009-01-27T21:50:19.647 に答える
0

依存します。

ページのコンテンツはデータベースに保存されていますか? もしそうなら、データベースからコンテンツ、タイトル、メタ情報を取得してテンプレートに挿入するだけの各コンテンツページのテンプレートを用意するのがおそらく最善でしょう。さまざまなタイプのページ (ニュース、静的コンテンツ ページ、アーカイブ ページなど) を作成することもでき、すべてが異なるテンプレートを持つことができます。

コンテンツが多かれ少なかれフラット ファイルに配置されている場合、2 つの提案は機能します。後者の提案が最も維持しやすいと思います。

于 2009-01-27T21:51:29.660 に答える
0

過去に両方の手法を使用した経験から、前者の方が柔軟であることがわかりましたが、不適切なプラクティスを助長する可能性があります。後者は、サイト全体のすべてのロジックを 1 か所に保持し、1 回限りの例外を作成することを思いとどまらせるため、はるかに一貫したユーザー エクスペリエンスを提供します。

私は実際、数年前に書いたサイトを、含まれているヘッダー/フッター/メニュー モデルからマスター ページ モデルに変換している最中です。インクルードの元のシステムはクリーンで簡単で、非常にうまく機能します。しかし、追加のコンテンツを作成すればするほど、プロジェクトがDRY 原則に違反し始めていることに気付きました。サイトのすべてのページは同じように始まり、同じように終わります (繰り返しは常に警告信号を送信する必要があります)。私は、個々のインクルードを省略し、1 回限りの置換を作成することで、標準のレイアウトに例外を設けるように誘惑されました。(ありがたいことに、私はその誘惑にあまり負けていません!)

サイトをリファクタリングすると、ページの一貫性が高まり、レイアウトが更新しやすくなり (「一目で」全体を確認できます)、新しいページを作成しやすくなります。

于 2009-01-27T21:56:20.650 に答える