Kentico 10 基于另一个 webpart 控制 webpart 的可见性

Kentico 10 Controlling visibility of webpart based on another webpart

我在一个页面上有 2 个可编辑的文本 Web 部件。一个 Web 部件上设置了默认文本,因为大多数情况下它都是相同的文本。

我想根据实时网站的另一个 Web 部件的文本设置此 Web 部件的可见性。

我试过这个:

 {#!string.IsNullOrEmpty(WebPart.GetValue("AreaDescription", "Content")) && 
CMS.PortalEngine.ViewModeEnum.LiveSite == CMS.PortalEngine.PortalContext.ViewMode  #}

但是它永远不可见,所以它没有成功地在另一个 Web 部件中获取文本。所以我想也许我需要调用 GetContent() 来获取用户提供的可编辑区域文本。我尝试编写自定义转换方法,但使用以下方法 - PagePlaceholder 未知,我不确定如何获取对它的引用。

CMSAbstractWebPart webpart = PagePlaceholder.FindWebPart("webPartId");

试试{% (ViewMode == "LiveSite") && (CMSContext.CurrentDocument.WebPartID != "") #%}

在宏中获取可编辑文本的内容:

{%CurrentDocument.DocumentContent["webPartId"]#%}

所以你要找的是这样的:

{%!string.IsNullOrEmpty(CurrentDocument.DocumentContent["AreaDescription"]) && (PortalContext.ViewMode == "LiveSite")#%}

来自 Kentico 支持 - 宏不允许我执行我想要实现的操作,因为其他 Web 部件的内容在 CMSContext 或 DocumentContent 中不可用。

由于我试图避免自定义 Web 部件,他们建议我可以为我的 Web 部件创建一个替代布局,该布局与默认布局相同并添加:

您的 onLoad 处理程序或任何更好的事件

如果是自定义 Web 部件,我可以添加:

///find another web part - in this case WebPart1
CMSAbstractWebPart webpart1 = PagePlaceholder.FindWebPart("WebPart1");

///store value/content of chosen property
string wp1DefaultText = ValidationHelper.GetString(webpart1.GetValue("DefaultText"), "");

可能在 Prerender 上以确保它不会被覆盖。

在这个阶段,我将删除默认文本,因为感觉就像我在与系统作斗争,获得的价值可能不值得 effort/customisation。