2012-04-18 26 views
0

私は現在、PHPで自分の小さなCMSを作成するためにcakephpを使用しようとしています。そのため、ウェブサイトを簡単に変更できるようにする必要があります。まず第一に、Webプログラマではない、これはただの空き時間です。default.ctp controller cakephpから情報を取得

私はコントローラを持っていますボタンとボタンは複数のカテゴリを持つことができます。 これをdefault.ctpにロードしようとすると、このメニューはすべてのページにロードされます。

default.ctpにコード:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title> 
     <?php __('eg'); ?> 
     <?php echo $title_for_layout; ?> 
    </title> 
    <?php 
    echo $this->Html->css('cake.generic.style'); 
    echo $scripts_for_layout; 
    ?> 
</head> 
<body> 
    <div class="wrapper"> 
     <div class="header"> 
      <h1>Electro Geers Bvba</h1> 
     </div> 
     <div id="navMenu"> 
      <?php 
      foreach ($buttons as $button) { 
       echo '<ul>'; 
       echo '<li><a href="' . h($button['Button']['naam']) . '.html">' . h($button['Button']['naam']) . '</a>'; 
       if (!empty($button['Category'])) { 
        echo'<ul>'; 
        foreach ($button['Category'] as $category) { 
         echo '<li><a href="' . $category['naam'] . '.html">' . $category['naam'] . '</a></li>'; 
        } 
        echo'</ul>'; 
       } 
       echo '</li>'; 
       echo '</ul>'; 
      } 
      ?> 
      <br class="clearFloat" /> 
     </div> 
     <div class="contents"> 
      <h3>Sectionale poorten en Hekwerken</h3> 
      <?php echo $content_for_layout; ?> 

     </div> 
     <div class="footer"> 
      Copyright © 2012 - 2017 
     </div> 
    </div> 
</body> 

私はCakePHPはnormaly probalyこの方法のように使用しなければならないではないが、私はそれが可能であるかどうかを知りたいことを知っていますか?ボタン名をdefault.ctpにロードするにはどうすればよいですか?

私は現在、このエラーを取得しています:

Notice (8): Undefined variable: buttons [APP\View\Layouts\default.ctp, line 20] 

警告(2):でforeachの()[APP \ビュー\レイアウト\のdefault.ctpに、ライン20]

答えて

3

のために供給無効な引数あなたAppController:

$this->loadModel('Button'); 
$buttons = $this->Button->find('all'); 
$this->set(compact('buttons')); 

これは、あなたの$buttonsを経由してアクセスできるようになりbuttonsテーブルを照会し、ビューに結果を渡すためにすべてのページを、原因となります変数。

データベースを介してメニューを処理する場合は、1つの形式でキャッシングを検討することを強くお勧めします。このようにすべてのページでデータベース呼び出しを強制するベストプラクティスではないでしょう。

多くのオプションがありますが、私が見てきたようなものはXMLファイルにメニューを保持することです。いつでもbuttonsが更新/編集/追加/削除されます...など、ファイル。

+0

ご意見ありがとうございました! –

+0

このコードをどのような方法で配置すればよいですか? – powtac

+0

powtac:AppControllerのbeforeFilter()すべてのコントローラがbeforeFilter beforeアクションでparent :: beforeFilter()を呼び出すようにしてください。 – Dave

関連する問題