隐藏“设置”菜单中的项目

时间:2014-01-03 18:19:56

标签: orchardcms

我创建了一个自定义部件,并通过我部件处理程序中的ActivatingFilter将其附加到Site部件/内容项(类似于所描述的here)。我还添加了一个Settings菜单项,通过覆盖处理程序的GetItemMetadata方法并为其添加GroupInfo对象来编辑该部件。这有效,我可以按预期编辑我的部分。

这是我的部分处理程序的样子:

public class ProductSettingsPartHandler : ContentHandler {
        public ProductSettingsPartHandler() {
            T = NullLocalizer.Instance;
            Filters.Add(new ActivatingFilter<ProductSettingsPart>("Site"));
        }

        public Localizer T { get; set; }

        protected override void GetItemMetadata(GetContentItemMetadataContext context) {
            if (context.ContentItem.ContentType != "Site")
                return;
            base.GetItemMetadata(context);

            // If I remove the following call, I can't use the site settings AdminController anymore.
            // But if I make this call, a menu item will be added to the Settings section - which I don't want.
            context.Metadata.EditorGroupInfo.Add(new GroupInfo(T("Pricing")) {
                Id = "Pricing",
                Position = "4.2"
            });
        }
    }

现在我想把菜单项移到另一个部分。我可以通过实现INavigationProvider创建新的菜单项,并为我提供设置AdminController的路径。但是,当我尝试从“设置”菜单中删除原始菜单项时(不再添加GroupInfo对象),我的新菜单项链接不再起作用。

根据我的研究,看起来设置AdminController正在进行显式检查,以确保为部件添加了GroupInfo对象,或者它不会返回视图进行编辑。这似乎使得无法使用AdminController设置来编辑附加到网站内容部分的部分,但不能在“设置”菜单部分中显示它们。

有关如何解决此问题的任何建议或想法?我的最终目标是像对待任何其他网站一样处理此网站设置部分,但是在管理菜单的另一部分中显示用于更新它的菜单项。

如果有任何不同,我正在开发Orchard 1.x分支。

谢谢!

1 个答案:

答案 0 :(得分:2)

要仅在特定组上显示给定的零件编辑器,请替换

ContentShape("<your editor name>", () => ...);

ContentShape("<your editor name>", () => ...).OnGroup("Pricing");

在你的部分驱动程序的Editor方法中。除了你已经使用上面的处理程序做的事情。

更新:

再次重读你的问题后,我想我最初误解了这个问题。您希望AdminController继续工作,但提供的组不应出现在“设置”下。

如果不覆盖默认的Orchard行为,这是不可能的。默认设置AdminController要求组存在,这反过来使它始终显示在菜单中。

最简单的解决方案是创建您自己的控制器,您将指向管理员链接。复制并粘贴当前的AdminController并从中删除所有与GroupInfo相关的检查应该可以解决问题。