【问题标题】:default.ctp get information from controller cakephpdefault.ctp 从控制器 cakephp 获取信息
【发布时间】:2012-04-18 17:36:06
【问题描述】:

我目前正在尝试使用 cakephp 在 php 中创建自己的小型 CMS。这样应该很容易修改网站。首先我不是网络程序员,这只是为了业余时间。

我有一个控制器按钮,一个按钮可以有多个类别。 所以我试图将其加载到 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 行]

【问题讨论】:

    标签: php cakephp cakephp-2.0 cakephp-2.1


    【解决方案1】:

    在您的 AppController 中:

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

    这将导致每个页面查询buttons 表并将结果传递给视图,然后可以通过您的$buttons 变量访问该视图。

    如果您要通过数据库处理菜单,我强烈建议您考虑以一种或另一种形式进行缓存 - 可能不是在每个页面上强制进行这样的数据库调用的最佳主意。

    有很多选项,但我见过并喜欢的一个是将菜单保留在 XML 文件中 - 然后,每当您的 buttons 更新/编辑/添加/删除...等时,更新XML 文件。

    【讨论】:

    • powtac: 在 AppController 的 beforeFilter() 中只需确保所有控制器在其 beforeFilter 操作中调用 parent::beforeFilter() 即可。
    • 谢谢!这就是我一直在寻找的。​​span>
    【解决方案2】:

    您也可以将 div id="navMenu" 放入一个元素中,然后使用 requestAction。请参阅其中一位 Cake 开发人员提供的此链接。

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

    【讨论】:

    • +1 upvote - 我比我更喜欢你的回答 - 我完全忘记了这一点。
    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多