0

現在、cakephp を使用して、php で独自の小さな CMS を作成しようとしています。ウェブサイトを簡単に変更できるようにするためです。まず第一に、私は Web プログラマーではありません。これは単なる暇つぶしです。

コントローラーのボタンがあり、ボタンには複数のカテゴリを含めることができます。このメニューがすべてのページにロードされるように、これを 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 をこのように使用するべきではないことはわかっていますが、それが可能かどうか知りたいですか? ボタン名を default.ctp に読み込むにはどうすればよいですか?

現在、次のエラーが発生しています。

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

警告 (2): foreach() に無効な引数が指定されました [APP\View\Layouts\default.ctp、20 行目]

4

2 に答える 2

3

AppController で:

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

これにより、すべてのページがテーブルに対してクエリを実行し、結果をビューに渡します。これにより、変数buttonsを介してアクセスできるようになります。$buttons

データベースを介してメニューを処理する場合は、何らかの形でキャッシュを検討することを強くお勧めします。すべてのページでこのようなデータベース呼び出しを強制するのはおそらく最善の方法ではありません。

多くのオプションがありますが、私が見て気に入ったのは、メニューを XML ファイルに保持することです。その後、buttons更新/編集/追加/削除などがあるたびに、XML ファイルを更新します。

于 2012-04-18T19:55:20.533 に答える
1

div id="navMenu" を要素に入れ、requestAction を使用することもできます。Cake 開発者の 1 人からのこのリンクを参照してください。

http://mark-story.com/posts/view/how-using-requestaction-increased-performance-on-my-site

于 2012-04-18T23:47:17.463 に答える