0

我正在尝试创建一个名为“图像摘要部分”的新小部件。我正处于最初阶段,我只是想在向页面添加小部件时让小部件出现在小部件列表中。相反,我只是得到了我没有创建的现有小部件:

用于 Kentico 小部件尝试的 Visual Studio 和浏览器的屏幕截图

你可以看到我已经创建了一个实现IWidgetProperties并且我已经调用RegisterWidget它的类。我还创建了_ImageSummarySection.cshtml(不过,我不希望小部件出现在小部件选择对话框中是必需的)。

顶层解决方案是针对 MVC 网站,底层解决方案是针对 Kentico CMS。两者都在运行,显示的浏览器是 Kentico CMS(我正在尝试在此屏幕截图中添加我的新小部件,但它不在小部件列表中)。

知道我做错了什么吗?如何让我的小部件出现在小部件列表中?

附加信息:

.

.

.

.

.

.

编辑:

我刚刚看了这个视频,希望它能提供见解:https ://www.youtube.com/watch?v=ljQO9on5lLM

它比我预期的更基本,但我确实注意到了这两个框架:

六个小部件

请注意,它显示了六个可供选择的小部件。

然后是这个框架:

两个小部件

它仅显示两个可用的小部件。

据此,我推断这些部分可能具有一些功能,允许开发人员限制其中允许哪些小部件。为了让我的小部件在默认部分(如下所示)中显示为选项,我可能需要做些什么吗?

默认部分

.

.

.

.

.

.

编辑#2:

我研究了一些小部件约束并发现了这一点:https ://docs.kentico.com/k12/developing-websites/page-builder-development/creating-pages-with-editable-areas-in-mvc

特别是标题为“限制可编辑区域中允许的小部件”的部分,其中包含以下内容:

限制小部件

由于我的观点没有传递带有小部件白名单的参数,因此(理论上)应该允许所有小部件:

@* Index.cshtml *@
@using Kentico.PageBuilder.Web.Mvc
@using Kentico.Web.Mvc

<h1>Rhythm Agency</h1>

@Html.Kentico().EditableArea("main")

所以就有了这个理论。我仍然不知道为什么在向页面添加新小部件时我的新小部件没有作为选项出现。

4

2 回答 2

1

要识别控制器和小部件,您需要将控制器放在“/Controllers”文件夹中。我的小部件控制器位于“/Controllers/Widgets”文件夹中。

我遇到的问题包括没有在类名中添加后缀“Controller”以及小部件控制器不在“/Controllers”文件夹中的问题。

另外你不是在一个单独的项目中工作吗?因为这需要您在“AssemblyInfo.cs”中使用以下内容

using CMS;
[assembly: AssemblyDiscoverable]

并确保您已在您的 kentico 项目中启用页面构建器功能。例如:

protected void Application_Start()
{
    ...

    // Gets the ApplicationBuilder instance
    // Allows you to enable and configure Kentico MVC features
    ApplicationBuilder builder = ApplicationBuilder.Current;

    // Enables the preview feature
    builder.UsePreview();

    // Enables the page builder feature
    builder.UsePageBuilder();

    ...
}
于 2020-07-19T12:25:12.310 回答
0

您快到了。您需要创建另一个类并在 App_Start 文件夹中注册您的小部件。在此处查看文档。这是关于小部件注册的部分。确保也启用页面构建器

*** 更新 ***

根据您的更新并且无法在我的移动设备上很好地看到图像,我能够看到您正在属性模型中定义/注册您的小部件。这需要在 Controller 中完成。请参见下面的示例。

\Models\Widgets\JobListingWidgetProperties.cs

namespace NameSpace.Models.Widgets.JobListingWidget
{
    public class JobListingWidgetProperties : IWidgetProperties
    {
        // property definitions here
    }
}

\Models\Widgets\JobListingModelView.cs

namespace NameSpace.Models.Widgets.JobListingWidget
{
    public class JobListingWidgetViewModel
    {
        // properties here
    }
}

\Controllers\Widgets\JobListingWidgetController.cs

[程序集:RegisterWidget("NameSpace.Widgets.JobListingWidget", typeof(JobListingWidgetController), "Job Listing Widget", Description = "显示给定路径的作业列表", IconClass = "icon-heartshake")]

namespace NameSpace.Controllers.Widgets
{
    public class JobListingWidgetController : WidgetController<JobListingWidgetProperties>
    {
        public ActionResult Index()
        {
            // code here
        }
    }
}
于 2020-07-17T05:18:27.343 回答