首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在另一个webpart部件中嵌套一个webpart部件

在另一个webpart部件中嵌套一个webpart部件
EN

Stack Overflow用户
提问于 2018-07-19 21:18:23
回答 3查看 550关注 0票数 0

有人知道在Kentico中是否有一种方法可以在另一个way部件中嵌套一个webpart吗?我做了一些研究,但我没有看到很多关于这个话题的结果,所以简单的回答似乎是否定的,但也许有一个解决办法?在我正在进行的项目中,内容作者必须能够在页面上放置汉堡包菜单,然后通过拖放在该汉堡包菜单中添加其他内容。如何在肯蒂科内部实现这一目标?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-07 23:40:39

回到这个岗位上。虽然向页面添加<cms:CMSEditableRegion />标记确实允许我在Webpart区域内嵌套一个Widget,但用户似乎没有必要在设计选项卡和页面选项卡之间切换以实现添加嵌套组件,更不用说将每个webpart注册为小部件;非常不必要。我注意到Kentico在布局中内置了允许嵌套was部件的webpart,所以我查看了代码,并最终找到了如何在另一个webpart中嵌套webpart!

确保您的code部件的代码隐藏继承自CMSAbstractLayoutWebPart

将以下方法添加到代码隐藏中:

代码语言:javascript
复制
protected override void PrepareLayout()
{
    StartLayout();

    Append("<div");
    Append(" style=\"width: ", "100%", "\"");

    if (IsDesign)
    {
        Append(" id=\"", ShortClientID, "_env\">");

        Append("<table class=\"LayoutTable\" cellspacing=\"0\" style=\"width: 100%;\">");

        if (ViewModeIsDesign())
        {
            Append("<tr><td class=\"LayoutHeader\" colspan=\"2\">");

            // Add header container
            AddHeaderContainer();

            Append("</td></tr>");
        }

        Append("<tr><td id=\"", ShortClientID, "_info\" style=\"width: 100%;\">");
    }
    else
    {
        Append(">");
    }

    // Add the tabs
    var acc = new CMSAccordion();
    acc.ID = ID + "acc";
    AddControl(acc);

    if (IsDesign)
    {
        Append("</td>");

        if (AllowDesignMode)
        {
            // Width resizer
            Append("<td class=\"HorizontalResizer\" onmousedown=\"" + GetHorizontalResizerScript("env", "Width", false, "info") + " return false;\">&nbsp;</td>");
        }

        Append("</tr>");
    }

    // Pane headers
    string[] headers = TextHelper.EnsureLineEndings("HEADER", "\n").Split('\n');

    // Create new pane
    var pane = new CMSAccordionPane();
    pane.ID = ID + "pane";

    pane.Header = new TextTransformationTemplate(string.Empty);
    acc.Panes.Add(pane);

    pane.WebPartZone = AddZone(ID + "-ContentArea", ID + "-ContentArea", pane.ContentContainer);

    acc.SelectedIndex = 1;

    if (IsDesign)
    {
        if (AllowDesignMode)
        {
            Append("<tr><td class=\"LayoutFooter cms-bootstrap\" colspan=\"2\"><div class=\"LayoutFooterContent\">");

            // Pane actions
            Append("<div class=\"LayoutLeftActions\">");
            Append("</div></div></td></tr>");
        }

        Append("</table>");
    }
    Append("</div>");

    FinishLayout();
}
票数 0
EN

Stack Overflow用户

发布于 2018-07-19 23:21:07

通常,web部件由用户控件而不是嵌套的web部件组成。例如,请看一下CMSRepeater。它设置由Kentico创建的用户控件的属性。

对于您正在解释的内容,您似乎想要一个包含小部件区域的自定义web部件。这些小部件区域将允许您将内容拖放到适当的位置(哪些内容我不知道,因为您不能在Kentico中拖放内容,只有区域/小部件)。

对于导航,您可能需要考虑基于内容树创建它,但在您的情况下,汉堡包菜单可能不是用于导航的。

票数 1
EN

Stack Overflow用户

发布于 2018-07-24 14:29:20

解决方案是在web部件中添加一个小部件区域。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51431867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档