2009-05-12 9 views
4

私は最近、PHPの連絡フォームを除いて個々のHTMLファイルで構成されたプロジェクトを手伝ってくれました。したがって、オブジェクト指向プログラミング、MVC、またはレイアウトのヒント(またはその点ではPHP)さえありません。Zend Frameworkをレイアウト専用に使うには?

プロジェクトはかなり大きいですが、私はゆっくりとZend Frameworkをこのプロジェクトに統合したいと考えていました。主にレイアウトの使用を開始しました。非常に多くの冗長性があるため、1つのファイルで行われるはずの小さな更新を行うのは時間の無駄です。

PHPの初期段階では、各ページ(ヘッダーとフッターなど)にコンテンツブロックを含めることで、コンテンツブロックを分割することができました。 Zend FrameworkのようなMVCフレームワークを使用して、ビューヘルパーを使用して個々のページコンテンツ(ビュー)を含むレイアウトファイルを作成することができます。私はこれが本当に好きです。なぜなら、私のヘッダやフッタを1つの場所に "含め"なければならないからです。

しかし、私はアプリケーションのディスパッチ/ブートストラップ(つまり、Zend Framework MVCコンポーネントをスタンドアロンコンポーネントとして代わりに使用する)なしでどのように動作するかはわかりません。レイアウトを使用するためにサイトを切り替えるための最良の方法は何でしょうか?それはどのように機能しますか?これはいいアイデアですか?

答えて

1

個人的には、テンプレート/レイアウト管理にのみ使用する予定のZend Frameworkを使用しないことをお勧めします。 PHPでテンプレート化する方がはるかに優れたソリューションがあります。これまではSmarty(これは以前はPHPプロジェクトの一部)でした。

Smartyは、これを後で行う必要がある場合はZend Frameworkとの統合を容易にしますが、Zend DevZoneにはいくつかの記事があります。

+8

smartyを使用することはお勧めできません。それは、私にとって、不要なコンピューティングの追加層です。私は、PHPで2〜3行必要なものについては、スマートな構文でサポートされていなかったため、さまざまなハッキングについて考えていることが分かりました。 –

+0

あなたの意見は異なるので、それはdownvoteの価値があるのですか?ワオ。私はキャプションが「この答えは役に立たない」と言ったと思いました。 –

+1

興味深いことにSmartyとの統合もお勧めしています... –

-2

私はあなたがデフォルトでこれを行うことはできないと思う、私はあなたも同様にZend Viewを使う必要があると思う。 しかし、私はZend_Layoutをあなたの既存のセットアップで動作するように変更できると確信しています。申し訳ありませんが、私はこのことをどうやって行うのか、より具体的ではありません。

出発点として、あなたがそれをどのように修正できるかを見るために、ZendへのSmarty統合について調べることをお勧めします。

+0

そしてあなたの他のコメントであなたはSmartyをお勧めしませんか? –

0

これは探しているのかどうかは分かりませんが、bbcにはMVC全体を使用せずにzendフレームワークの一部を使用するビデオがいくつかあります。私は、彼らが部品4 & 5であると思いますhttp://bbcwebdevelopers.blip.tv/

6

あなたは確かに単独でZend_Layoutのを使用することができ、それが手動で詳述されます:私はあなたが経由してあなたのスクリプトの出力をキャプチャする必要があるだろうと考えてい

28.2.3. Using Zend_Layout as a Standalone Component

出力バッファリングし、エコーされるレイアウトに渡します。

この状況は理想的ではありません。完全なMVCに移行することなく、別の基本的なテンプレートシステムを使用することをお勧めします。

0

Zend_Layoutは実際にはヘッダーやフッターを含めるのではなく、1つの大きなテンプレートにさまざまなコンテンツビットを挿入するのに最適です。 CSS、スクリプト、タイトルタグなどのHEADタグやナビゲーションなどのカスタムプレースホルダを挿入することができる、コンテンツの本体を挿入するなど、かなり洗練されています。

あなたの説明から、単純なPHPインクルードのヘッダーとフッターのソリューションに行きます。実装が簡単になり、共通のテンプレート要素の複製が削除されます。

これを実際にZend Frameworkを学ぶには、dcauntが示唆するようにスタンドアロンモードでZend_Layoutを使用することができます。あなたのサイトはそれを必要としていないので、MVCブートストラップシステムを使用しようとしても意味がありません。私は単純にZend_Layoutを起動し、file_get_contents()のようなものを介して$ layout-> content変数に要求されたファイルをロードする単一のPHPファイルにすべての* .htmlリクエストを送るURLリライティングを使用します。

あなたが望むなら、ZFをフォーム処理に使うこともできます。

9

私は最近、ZFのレイアウト&ビューを利用するためにmish-mashファイル構造*の変換を開始しました。目標は、htmlを含むすべてのファイルをレイアウトとビュー用にrecommended file structureに移動することです。

  1. 各ファイルからすべてのマークアップを抽出し、その中に変数を保持しますが、ロジックは保存しないでください。このファイル/アプリケーション/ビュー/スクリプト/ ページに名前を付け/ビュー .phtmlとしてほとんどのページに合ったスケルトンを作成します
  2. (例えば/application/views/scripts/index/login.phtml用)/アプリケーション/レイアウト/スクリプト/ レイアウト .phtmlと、それはこのようなものが含まれてみましょう:

    <?php echo $this->doctype('XHTML1_STRICT'); ?> 
    <html> 
    <head> 
        <?php echo $this->headLink(); ?> 
    </head> 
    <body> 
        <div id="wrapper"> 
        <?php echo $this->layout()->content; ?> 
        </div> 
    </body> 
    </html> 
    
  3. (あなたのパスを含めると、そのオートローダを登録するにはZendを追加します。)すべてのファイルに含まれるファイルを作成します。 (あなたがsingle point of entryを持っていない限り、その場合はそこに置いてください!)うち、このと同等:(ロジックではなくHTMLで)あなたが残っている

    $view = new Zend_View(); 
    $view->setScriptPath('/application/views/scripts'); 
    
    $layout = new Zend_Layout(); 
    $layout->setLayoutPath('/application/layouts/scripts'); 
    $layout->setView($view); 
    
    Zend_Registry::getInstance()->set('layout', $layout); 
    
  4. 各PHPファイルは、レイアウトへのアクセス権を持っている必要があり、それを修正する:

    $layout = Zend_Registry::getInstance()->get('layout'); 
    
    $view = $layout->getView(); 
    $view->headLink()->appendStylesheet('/css/a_css_file.css'); 
    
    // most important step, done automatically when using MVC, but now you have to do it manually 
    $layout->content = $view->render('index/login.phtml'); 
    
    echo $layout->render(); 
    
  5. 最も重要なの次回ステップは、別のレイアウトを追加します

    // /application/layouts/scripts/blank.phtml 
    <?php echo $this->doctype('XHTML1_STRICT'); ?> 
    <html> 
        <head></head> 
        <body> 
         <?php echo $this->layout()->content; ?> 
        </body> 
    </html> 
    

    とあなたのロジックcontaingのいずれかのファイルで

    $layout = Zend_Registry::getInstance()->get('layout'); 
    $layout->setLayout('blank'); 
    

近い将来、フロントコントローラのようなデザインパターンを見て、MVCのような構造に適応することができます。

* 1つのファイル:モデル、コントローラ、html、論理的順序なし。

関連する問題