質問
PHPで書かれたプロトタイプのWebサイトがあります。最近、コードを書き直して、レイアウトとデータベース操作からロジックを分離しました。だから今、MVCコードデザインのようなものがあります。
今、私を悩ませているのは、MVCでは多くのファイルがあり、それぞれが他のファイル(モデル+ビュー+コントローラー)と組み合わせると何かを表示するということです。そのため、MVCパーツのウィジェットのようなものを作成すると便利だと思いました。
たとえば、製品ビューのMVCがある場合、このような方法でMVCパーツファイルを組み合わせて、この新しいPHPファイルに渡すGET値に基づいて製品を表示するPHPファイルを作成します。
この方法で私が成し遂げることは、すべてのウィジェット、ウェブサイトのサブパートが別々に表示され、他のパーツとは別に使用できるということです。したがって、ウィジェットやFirefoxブラウザーのデザインのようなものになります。
だから、ウェブサイトのすべての部分を個別にテストし、これらの部分を現在の実際のウェブサイトのページ設計に結合するだけではありません。そのため、ユーザーテストも簡単になり、プレゼンテーションファイルは非常に短くなり、理解しやすくなります。
私はあなたがそれについてどう思うか知りたいです。私はデザインの問題に陥りたくありません。これは、ウェブサイトのコードを簡単に維持し続けるために、今後重要になる瞬間だと思います。
修正しますか
解決
MVC多数のファイルがあり、それぞれが他のファイル(モデル+ビュー+コントローラ)と組み合わせると何かが表示されます
これは、MVCモデルを正しく取得できなかったようです。ビューのみにコンテンツがあるか、「何かを表示する」。
これに基づいて、コンテンツの小さなウィジェットのような部分のみを作成するアクションを作成し、レイアウトで組み合わせることができます。
Zend_Layoutクイックスタートを読むことをお勧めしますa>。
他のヒント
問題の答えは、構成を表示です。
画面全体を小さな部分に分割することをお勧めします:トップバー、第2レベルのナビゲーションバー、製品リスト、プレビューエリアなど。これらは、個別のビュー、ビューヘルパー、またはコントローラーの追加メソッドによって提供されます。コントローラーアクションは、単純なHTMLレイアウトを使用して、1つの画面に構成します。
たとえば静的なトップバーの場合、これは特殊なビューです。動的な製品リストの場合、複雑なビューを提供するコントローラーメソッド getProductsList($ categoryId)
があります。製品のプレビューは、ビューヘルパーによって配信できます。次の例を参照してください。
// inside class ProductsController
public function index($categoryId, $productId = null) {
// specialised view
$topBar = new TopBarView();
$topBar->selected = 'products';
// helper method
$list = $this->getProductsList($categoryId);
// helper object
$previewHelper = new PreviewHelper($productId);
$preview = $previewHelper->getView();
// view composition
$view = new View('path/to/template.tpl');
$view->add($topBar);
$view->add($list);
$view->add($preview);
return $view;
}
これは、合成の仕組みを説明するための単なる例です。
ウィジェット(つまり製品リスト)を配信する方法があることの隠れた利点は、Ajaxをサポートするために再利用できることです。カテゴリを変更するには、新しいカテゴリIDで getProductsList
メソッドをAjaxで呼び出す必要があります。