1

上記のようなモジュール構造を持つZendFrameworkMVCアプリケーションがあります。

/application
  /layouts
    /sripts
      /layout.phtml
  /modules
    /default
      /controllers
        /IndexController.php
        /OtherController.php
      /views
        /scripts
          /index
            /index.phtml
            /second.phtml
            /third.phtml
            /fourth.phtml
          /other
            /index.phtml
            /second.phtml
            /third.phtml
            /fourth.phtml

私のlayout.phtmlに行があります

<div id="main">
    <?= $this->layout()->content ?>
</div>

レンダリングされたアクションビューを、4番目を除くIndexControllerとOtherControllerのすべてのアクションで、最初とレンダリングされたアクションビューの最後などのコードでラップしたいと思い<div id='top'></div>ます<div id='bottom'></div>。すべてのアクションビュー*.phtmlファイルで手動で実行したくありません。実際のアプリケーションには多すぎるだけでなく、そのソリューションではコードが乱雑に見えます。

どうやってするの?

4

3 に答える 3

1

IndexControllerOtherController:に対してのみ異なるレイアウトを設定できinit()ます。各コントローラーのメソッドで、以下を追加できます。

Zend_Layout::getMvcInstance()->setLayout('some other layout');
于 2012-05-29T02:35:04.733 に答える
1

レイアウト ファイルでは、レイアウト変数をエコーできます。これは通常、アクションによってレンダリングされる html を置く場所です。複数のアクションからのレンダリングを 1 つのレイアウト変数に追加すると、LIFO 順に表示されます。その変数をレイアウト ファイルに挿入する方法は次のとおりです。

<?php echo $this->layout()->myLayoutVariable; ?>

レイアウト ファイル内にプレースホルダー変数を設定することもできます。

<?php echo $this->placeholder('myPlaceholderVariable'); ?>

ビュー ファイルの 1 つで、このプレースホルダー変数の html コンテンツを提供できます。

<?php
    $this->placeholder('myPlaceholderVariable')->append('<p>HTML GOES HERE</p>');
?>

プレースホルダー変数に値を設定しない場合、レイアウト ファイルには何もレンダリングされません。ただし、そのプレースホルダー変数に値を設定すると、html に挿入されます。

于 2013-01-04T20:07:16.780 に答える
0

これを試して:

$(document).ready(function(){

   $("#main").before(//insert header html here);
   $("#main").after(//insert footer html here);

});

4番目の意味はわかりませんが、特定のコントローラー/アクションをターゲットにしたい場合は、window.location.hrefを取得して、探したい特定のURLに関数を依存させることができます.

それが役立つことを願っています。

于 2012-05-29T02:45:30.870 に答える