0

我敢肯定,这一定是以前问过的。但我一直找不到任何有用的东西。

我想创建一些小部件(现有的小部件类型、菜单、投影),作为自定义模块安装的一部分。还有一些查询和投影页面。

以及一个新菜单(orchard 1.5.1),我从设置模块中的代码中找出了菜单部分

...

    // create a project menu
    var projectMenu = _menuService.Create("new Menu");

    // assign the project items to all current menu items
    foreach (var menuItem in _menuService.Get().Where(x => x.ContentItem.ContentType == "Project"))
    {
        // if they don't have a position or a text, then they are not displayed
        if (string.IsNullOrWhiteSpace(menuItem.MenuPosition) || string.IsNullOrEmpty(menuItem.MenuText))
    {
       continue;
    }
    menuItem.Menu = projectMenu.ContentItem;

我可以在迁移中包含一些东西来添加小部件和投影吗?

我一直在查看 Orchard Recipe 模块,并看到那里有用于执行命令以设置小部件的代码。但我不确定如何最好地利用这个......

创建配方实例管理和执行整个配方似乎有点复杂。

4

1 回答 1

0

在您可以使用的所有地方都有一些非常有用的看似未记录的服务。

使用以下构造函数

public class MigrationProjectType : DataMigrationImpl 
    {
        private readonly IMenuService _menuService;
        private readonly IContentManager _contentManager;
        private readonly IQueryService _queryService;
        private readonly IWidgetsService _widgetsService;

        public MigrationProjectType(IMenuService menuService, IContentManager contentManager,  IQueryService queryService, IWidgetsService widgetsService)
        {
            _menuService = menuService;
            _contentManager = contentManager;
            _queryService = queryService;
            _widgetsService = widgetsService;
        }
...
}

Auto fac 将负责实例化服务

然后

public int UpdateFrom2()
        {
            // create a project menu
            var projectMenu = _menuService.Create("Projects Menu");

            // assign the project items to all current menu items
            foreach (var menuItem in _menuService.Get().Where(x => x.ContentItem.ContentType == "Project"))
            {
                // if they don't have a position or a text, then they are not displayed
                if (string.IsNullOrWhiteSpace(menuItem.MenuPosition) || string.IsNullOrEmpty(menuItem.MenuText))
                {
                    continue;
                }
                menuItem.Menu = projectMenu.ContentItem;
            }

            // create layer part 
            _widgetsService.CreateLayer("SideBar", "desc", "url(\"~\")");

            var defaultLayer = _widgetsService.GetLayers().First(x => x.Name == "Default");

            var widget =  _widgetsService.CreateWidget(defaultLayer.Id, "MenuWidget", "Projects Menu", "2", "Navigation");

            var menuWidget = widget.As<MenuWidgetPart>();
            menuWidget.Record.Menu = projectMenu.ContentItem.Record;

            _contentManager.Publish(menuWidget.ContentItem);

            return 3;
        }

查询有类似的服务,但我仍然不确定如何为查询添加过滤器,用于预测......

更新

继承人如何添加查询和过滤器

public int UpdateFrom7()
        {


            // create a project menu
            var projectMenu = _queryService.CreateQuery("My projects 3");

            var form = new Form { ContentTypes = "Project" };
            var xmlSerializer = new XmlSerializer(form.GetType());
            StringWriter sww = new StringWriter();
            XmlWriter writer = XmlWriter.Create(sww);
            xmlSerializer.Serialize(writer, form);
            var state = sww.ToString();


            projectMenu.FilterGroups[0].Filters.Add(new FilterRecord
            {
                Category = "Content",
                Description = "My filter",
                Position = 0,
                State = state,
                Type = "ContentTypes"
            });

            _contentManager.Publish(projectMenu.ContentItem);


            return 8;
        }

[Serializable]
    public class Form
    {
        public string Description { get; set; }
        public string ContentTypes { get; set; }

    }
于 2012-08-05T20:22:47.133 回答