Cakephp,将视图添加到侧边栏

Posted

技术标签:

【中文标题】Cakephp,将视图添加到侧边栏【英文标题】:Cakephp, adding a view to a sidebar 【发布时间】:2014-04-04 20:19:12 【问题描述】:

我正在努力理解 cakephp 的视图、块和布局。

我需要每个页面都显示一个左右侧边栏,哪些内容可能会改变。目前,我在 /pages/home.ctp 中定义了右侧边栏,但我猜测扩展该边栏会更好,因为它必须出现在每个页面中。如果这个想法是错误的,请纠正我。

然后,我为“usuarios”表提供了这个视图add.ctp,它实际上显示了登录名和密码字段。我想在侧边栏中显示这个视图,但我真的不知道该怎么做。

提前致谢。

【问题讨论】:

【参考方案1】:

让这件事变得简单。正如@patrick 所说,有很多方法。

从布局文件开始。重新排列你的 default.ctp 布局,如-

default.ctp 布局

<div id="container">
    <div id="header">
        <?php echo $this->element('header');?>
    </div>

    <div id="left-sidebar">
      <?php echo $this->element('left-sidebar');?>          
    </div>

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

    <div id="right-sidebar">
        <?php echo $this->element('right-sidebar');?>           
    </div>

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

现在创建元素 ctp 文件为 header.ctp、left-sidebar.ctp、right-sidebar.ctp 等并将它们放置到app/View/Elements

您的 left-sidebar.ctp 文件可能如下所示...

left-sidebar.ctp

    // to show login form //
if you just need to show on view.ctp place few logic here for login form.
//end login form//

show other sidebar contents

【讨论】:

【参考方案2】:

有几种方法可以做到这一点,具体取决于您的 Cake 版本。如果您使用 >=2.1(我假设您是因为您询问了块),那么您应该尝试这些以查看它们是否适用于您的设置。我通常做事的方式是,如果控制器的所有视图都需要公共标记,那么这些视图文件将扩展控制器目录中的基本视图,例如

#/View/Posts/index.ctp
<?php
    $this->extend('_skel'); //arbitrary filename, I use '_skel' since that makes sense
    echo $this->html->para(null, 'Hello');

#/View/Posts/_skel.ctp
<?php
    echo $this->Html->div('sidebar', 'Sidebar for posts...');
    echo $this->fetch('content'); // This gets all output from the Posts/index.ctp view

那么你所有扩展 _skel 的帖子视图都会自动拥有侧边栏。

您的登录模块可能作为一个元素有意义 - 可以在您的视图中的任何位置使用。

【讨论】:

以上是关于Cakephp,将视图添加到侧边栏的主要内容,如果未能解决你的问题,请参考以下文章

如何将侧边栏添加到存档页面

将文件夹添加到 CFileDialog 的侧边栏

VueJS将活动类添加到侧边栏链接

将菜单项列表传递到 Backpack Laravel 中的侧边栏

自动将新帖子添加到侧边栏

在 SwiftUI (Xcode 12) 中折叠侧边栏