Orchardcms Orchard cms扩展菜单项部分

Orchardcms Orchard cms扩展菜单项部分,orchardcms,Orchardcms,在orchard扩展菜单部分的最佳方式是什么 我想对大多数内容类型使用普通菜单部分 但我还想要一个定制的MainNavigationMenuPart。它拥有菜单部分的所有功能,但添加了媒体选择器字段和文本字段。-这些项目将在菜单滚动时显示 选择1 我认为这是最好的方式去 我曾经考虑过编写一个自定义菜单部分,但它似乎有很多功能,可以帮助您了解菜单部分当前的工作方式,我不确定如何以一种干巴巴的方式来使用它 我可以向customPart添加一个MenuPartItem,所以主菜单部件模型如下所示 pu

在orchard扩展菜单部分的最佳方式是什么

我想对大多数内容类型使用普通菜单部分

但我还想要一个定制的MainNavigationMenuPart。它拥有菜单部分的所有功能,但添加了媒体选择器字段和文本字段。-这些项目将在菜单滚动时显示

选择1

我认为这是最好的方式去

我曾经考虑过编写一个自定义菜单部分,但它似乎有很多功能,可以帮助您了解菜单部分当前的工作方式,我不确定如何以一种干巴巴的方式来使用它

我可以向customPart添加一个MenuPartItem,所以主菜单部件模型如下所示

public class MainMenuPart : ContentPart<MainMenuRecord>
    {
        public MenuPart MenuPart { get; set; }

        public string ShortDescription
        {
            get { return Record.ShortDescription; }
            set { Record.ShortDescription = value; }
        }

    }
但是

如何在零件的编辑器视图中渲染此选项? 我想使用现有的MenuPartItemEditor。 如何在零件记录中保存此信息? 选择2

我还研究了通过cms向菜单部分添加字段

我的菜单部分现在在后端看起来像这样

在这里,我根据内容类型定制了菜单的管理视图。 购买在视图/编辑模板中创建Parts.Navigation.Menu.Edit.cshtml,在我的自定义模板中,我可以访问菜单部分,但我似乎可以控制添加到该部分的文件的显示。菜单图像、突出显示和简短描述

这是在Orchard.Core/Navigation/Views/EditorTemplates/Parts.Navigation.Menu.Edit.cshtml中找到的自定义Parts.Navigation.Menu.cshtml原件

@model Orchard.Core.Navigation.ViewModels.MenuPartViewModel

@using Orchard.ContentManagement
@using Orchard.Core.Navigation.Models;

@if (!Model.ContentItem.TypeDefinition.Settings.ContainsKey("Stereotype") || Model.ContentItem.TypeDefinition.Settings["Stereotype"] != "MenuItem")
{

    if (Model.ContentItem.ContentType == "StandardIndexPage" ||
        Model.ContentItem.ContentType == "AlternateIndexPage" ||
        Model.ContentItem.ContentType == "MapIndexPage")
    {

        var sd = ((dynamic)Model.ContentItem).MenuPart.ShortDescription;

        @sd

        <fieldset>

            @Html.HiddenFor(m => m.OnMenu, true)
            @Html.HiddenFor(m => m.CurrentMenuId, Model.CurrentMenuId)
            <div>
                <label for="MenuText">@T("Menu text (will appear on main menu)")</label>
                @Html.TextBoxFor(m => m.MenuText, new { @class = "text-box single-line" })
                <span class="hint">@T("The text that should appear in the menu.")</span>
            </div>

        </fieldset>
    }

    else
    {
          <fieldset>

            @Html.EditorFor(m => m.OnMenu)
            <label for="@Html.FieldIdFor(m => m.OnMenu)" class="forcheckbox">@T("Show on menu")</label>
            <div data-controllerid="@Html.FieldIdFor(m => m.OnMenu)" class="">
                <select id="@Html.FieldIdFor(m => m.CurrentMenuId)" name="@Html.FieldNameFor(m => m.CurrentMenuId)">
                    @foreach (ContentItem menu in Model.Menus)
                    {
                        @Html.SelectOption(Model.CurrentMenuId, menu.Id, Html.ItemDisplayText(menu).ToString())
                    }
                </select>
                <span class="hint">@T("Select which menu you want the content item to be displayed on.")</span>

                <label for="MenuText">@T("Menu text")</label>
                @Html.TextBoxFor(m => m.MenuText, new { @class = "text-box single-line" })
                <span class="hint">@T("The text that should appear in the menu.")</span>

            </div>
        </fieldset>    
    }


}
else
{

    <fieldset>
        <label for="MenuText">@T("Menu text")</label>
        @Html.TextBoxFor(m => m.MenuText, new { @class = "textMedium", autofocus = "autofocus" })
        <span class="hint">@T("The text that should appear in the menu.")</span>
        @Html.HiddenFor(m => m.OnMenu, true)
        @Html.HiddenFor(m => m.CurrentMenuId, Request["menuId"])
    </fieldset>

}
我还尝试使用主题中的placement.info来控制字段的显示

<Match ContentType="StandardIndexPage">
    <Place Fields_Boolean_Edit-Highlight="-"/>
  </Match>

没有成功。

问题一点也不清楚。例如,这个模板的名称是什么?它应该做什么?问题编辑,希望现在更清楚主题的位置信息在管理中不起作用,因为你的主题在管理中不活动,除非它是一个管理主题,它不是。管理员的位置可以从管理员处修改。转到“内容类型编辑器”并编辑菜单项“内容类型”。有一个按钮,可以让你改变位置。