Admin 果园中的自动路由批量操作

Admin 果园中的自动路由批量操作,admin,orchardcms,orchardcms-1.7,orchardcms-1.8,Admin,Orchardcms,Orchardcms 1.7,Orchardcms 1.8,如果自定义自动路由部件,则可以在每次保存时重新创建url 此选项下的帮助文本显示: “编辑内容时自动重新生成 此选项将导致在编辑现有内容并再次发布时自动重新生成Url,否则它将始终保留旧路由,或者您必须在自动路由管理中执行批量更新。” 我已经翻遍了所有地方,但我找不到任何“自动路由管理员” 它真的在那里吗 这是一个从未实现的建议功能 即使没有管理员页面也可以进行批量更新吗 谢谢 在@joshb建议后编辑 我已尝试在控制器中实现批量操作 var MyContents = _contentMan

如果自定义自动路由部件,则可以在每次保存时重新创建url

此选项下的帮助文本显示:

“编辑内容时自动重新生成 此选项将导致在编辑现有内容并再次发布时自动重新生成Url,否则它将始终保留旧路由,或者您必须在自动路由管理中执行批量更新。”

我已经翻遍了所有地方,但我找不到任何“自动路由管理员”

它真的在那里吗

这是一个从未实现的建议功能

即使没有管理员页面也可以进行批量更新吗

谢谢

在@joshb建议后编辑

我已尝试在控制器中实现批量操作

  var MyContents = _contentManager.Query<MyContentPart, MyContentPartRecord>().List().ToList();

  foreach (var MyContent in MyContents) {
        var autoroutePart = recipe.ContentItem.As<AutoroutePart>();
        autoroutePart.UseCustomPattern = false;
        autoroutePart.DisplayAlias = _autorouteService.GenerateAlias(autoroutePart);
        _contentManager.Publish(autoroutePart.ContentItem);
  }
var MyContents=\u contentManager.Query().List().ToList();
foreach(MyContent中的var MyContent){
var autoroutePart=recipe.ContentItem.As();
autoroutePart.UseCustomPattern=false;
autoroutePart.DisplayAlias=\u autorouteService.GenerateAlias(autoroutePart);
_发布(autoroutePart.ContentItem);
}
通过这种方式,它为包含给定部件MyContentPart的类型重新创建所有别名。 通过进一步的工作,可以将此代码封装在命令或Alias UI的新选项卡中。
完成当前项目后,我将尝试…

模块部分中的启用别名UI将为您提供管理路由的管理部分,但是我不确定它提供了什么样的批量更新

您可以创建一个模块并实现一个执行批量更新的命令。如果您对创建模块感到满意,那么就不应该有太多的工作。您需要实现DefaultOrchardCommandHandler并注入IContentManager以获取您感兴趣的所有部分。

如果内容项已经发布,则发布该内容项将不会起任何作用(就像我的情况一样)

相反,可以在自动路由服务上调用PublishAlias方法。我最终得到了一个控制器,类似这样:

using Orchard;
using Orchard.Autoroute.Models;
using Orchard.Autoroute.Services;
using Orchard.ContentManagement;
using Orchard.Localization;
using Orchard.Security;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;

namespace MyNamespace.MyModule.Controllers {

    public class AutorouteBulkUpdateController : Controller {

        private readonly IOrchardServices _orchardServices;
        private readonly IAutorouteService _autorouteService;
        private Localizer T { get; set; }

        public AutorouteBulkUpdateController(IOrchardServices orchardServices, IAutorouteService autorouteService) {
            _orchardServices = orchardServices;
            _autorouteService = autorouteService;
            T = NullLocalizer.Instance;
        }

        public ActionResult Index() {

            if (!_orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to manage settings"))) {
                return new HttpUnauthorizedResult();
            }

            int count = 0;
            IEnumerable<AutoroutePart> contents;

            do {
                //contents = _orchardServices.ContentManager.Query<AutoroutePart>(VersionOptions.Latest, new string[] { "Page" }).Slice(count * 100, 100).ToList();
                contents = _orchardServices.ContentManager.Query<AutoroutePart>(VersionOptions.Latest).Slice(count * 100, 100).ToList();

                foreach (var autoroutePart in contents) {

                    var alias = _autorouteService.GenerateAlias(autoroutePart);

                    if (autoroutePart.DisplayAlias != alias) {
                        autoroutePart.UseCustomPattern = false;
                        autoroutePart.DisplayAlias = alias;
                        _autorouteService.PublishAlias(autoroutePart);
                    }
                }

                _orchardServices.TransactionManager.RequireNew();
                _orchardServices.ContentManager.Clear();

                count += 1;

            } while (contents.Any());

            return null;
        }
    }
}
利用果园;
使用Orchard.Autoroute.Models;
使用Orchard.Autoroute.Services;
采用果园管理;
使用果园。本地化;
使用果园。安全;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web.Mvc;
命名空间MyNamespace.MyModule.Controller{
公共类自动路由BulkUpdateControl:控制器{
私人只读IOrchardServices\u orchardServices;
专用只读IAutorouteService(自动路由服务);
专用定位器T{get;set;}
公共自动路由BulkUpdateControl(IOrchardServices orchardServices、IAutrouteService自动路由服务){
_果园服务=果园服务;
_自动路由服务=自动路由服务;
T=NullLocalizer.Instance;
}
公共行动结果索引(){
if(!\u orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner,T(“未授权管理设置”)){
返回新的HttpUnauthorizedResult();
}
整数计数=0;
可数内容;
做{
//contents=_orchardServices.ContentManager.Query(VersionOptions.Latest,新字符串[]{“Page”}).Slice(count*100100.ToList();
contents=_orchardServices.ContentManager.Query(VersionOptions.Latest).Slice(count*100100.ToList();
foreach(目录中的var自动路由部分){
var别名=_autorouteService.GenerateAlias(autoroutePart);
if(autoroutePart.DisplayAlias!=别名){
autoroutePart.UseCustomPattern=false;
autoroutePart.DisplayAlias=别名;
_autorouteService.PublishAlias(autoroutePart);
}
}
_orchardServices.TransactionManager.RequireRenew();
_corchardservices.ContentManager.Clear();
计数+=1;
}while(contents.Any());
返回null;
}
}
}

我已经编辑了这个问题。我曾尝试实施,但似乎没有效果。有什么建议吗?我已经做了更多的工作,现在的代码对我来说很有用。。。这只是一个片段,但对于我当前的需要,它已修复了问题。我怀疑您需要发布内容项,但没有时间亲自测试它。很高兴听到你让它工作了。