0

私は CakePHP 2.2.4 を使用しており、同様のレイアウトを持っています。ただし、1 ページについては、<head>内容は同じですが、本質的に本文全体が異なります。私が持っているのは、Twitter のブートストラップから使用されるナビゲーション バーを備えた Web サイトです。この 1 ページでは、navbar がまったく異なります。そのページだけのレイアウトを作成するのが手っ取り早い解決策であることはわかっていますが、別のナビゲーション バーで作成する必要がある別のページに出くわした場合はどうすればよいでしょうか? これを行う「適切な」MVCの方法は何でしょうか?

4

2 に答える 2

2

すべてのビューに何らかのナビゲーションバーがある場合、 CakePHP Elementsを使用してバーを表示できます。要素呼び出しを 1 つのレイアウト ファイルに配置し、コントローラから変数を設定して要素に渡し、特定の要素...

echo $this->element('navbar', array(
    "which_element" => "thisone"
));

上記の例では、navbar.ctp にすべての navbar を含め、PHP の Switch ステートメントまたは何かを使用して、$which_element に基づいて表示するものを決定する必要があります...

または、コントローラーの変数を使用して要素を直接呼び出すだけです

$this->set('navbar', "thisone"); // this line is in your controller and sets the file name of your nav bar, minus the .ctp extension

echo $this->element($navbar); //this line is in your layout.ctp and renders elements/thisone.ctp, in the above example.

ナビゲーション バーがあるページとないページがある場合は、ビュー ブロックを使用します。

$this->start('navbar');
echo $this->element($navbar);
$this->end();
于 2013-01-09T09:16:11.030 に答える
2

違いがどれほど複雑かによると思います。

1 つの方法は、共通のレイアウト ファイルを用意することです。

   // in app/View/Common/layout.ctp

    <!DOCTYPE html>
    <html lang="en">
    <head>

<!-- Your header content -->

</head>

<body>

    <div id="wrap">
        <div class="navbar">
            <?php echo $this->fetch('menu'); ?>
        </div>
        <div class="container">
            <?php echo $this->fetch('content'); ?>
        </div>
    </div>

    <div id="footer">
        <?php echo $this->fetch('footer'); ?>
    </div>

  </body>
</html>

レイアウト ファイルを拡張する

//app/View/Layouts/default.ctp
<?php 
$this->extend('/Common/layout');
$this->assign('menu', $this->element('menu'));
echo $this->fetch('content');
$this->assign('footer', $this->element('footer'));
?>
于 2013-01-09T09:19:57.987 に答える