3

アプリケーションの各モジュールには、メイン コンテンツ セクションとサイドバー メニューがあります。

私のレイアウトには次のものがあります...

<div id="main" class="span8 listings">
    <?php echo $this->content; ?>
</div>

<div id="sidebar" class="span4">
    <?php echo $this->sidebar; ?>
</div>

私のコントローラーはすべて、コンテンツを指定する単一の ViewModel を返します (以下を参照)。

public function detailsAction()
{
    *some code to populate data*

    $params = array('data' => $data);               

    $viewModel = new ViewModel($params);
    $viewModel->setTemplate('school/school/details.phtml');     

    return $viewModel;
}

ここで何か根本的に間違ったことをしている気がします。

4

3 に答える 3

6

部分ビュー ヘルパーを使用して「サブ テンプレート」を含めることができます

<div id="main" class="span8 listings">
    <?php echo $this->content; ?>
</div>

<div id="sidebar" class="span4">
    <?php echo $this->partial('sidebar.phtml', array('params' => $this->params)); ?>
</div>
于 2013-03-11T15:43:17.077 に答える
1

コントローラでは、ビューモデルのネストレイアウトプラグインを使用できます。

public function fooAction()
{
    // Sidebar content
    $content = array(
        'name'     => 'John'
        'lastname' => 'Doe'
    );
    // Create a model for the sidebar
    $sideBarModel = new Zend\View\Model\ViewModel($content);
    // Set the sidebar template
    $sideBarModel->setTemplate('my-module/my-controller/sidebar');

    // layout plugin returns the layout model instance
    // First parameter must be a model instance
    // and the second is the variable name you want to capture the content
    $this->layout()->addChild($sideBarModel, 'sidebar');
    // ...
}

ここで、レイアウトスクリプトで変数をエコーするだけです。

<?php
    // 'sidebar' here is the same passed as the second parameter to addChild() method
    echo $this->sidebar;
?>
于 2013-03-12T12:30:53.283 に答える