Umbraco 6:如何将新创建的节点放在顶部

Umbraco 6:如何将新创建的节点放在顶部,umbraco,umbraco6,Umbraco,Umbraco6,在Umbraco 6中,当您创建一个新节点时,它会放在底部。 如果希望它位于顶部,则必须手动对其进行排序 默认情况下,如何使新节点显示在顶部?可以创建一个事件处理程序,在创建新节点时更改节点的排序顺序。有关实现自己的处理程序的更多详细信息,请参阅 粗略的未经测试的示例,我相信您可以使其更加优雅,但应该为您指出正确的方向: public class YourApplicationEventHandlerClassName : ApplicationEventHandler { protec

在Umbraco 6中,当您创建一个新节点时,它会放在底部。
如果希望它位于顶部,则必须手动对其进行排序


默认情况下,如何使新节点显示在顶部?

可以创建一个事件处理程序,在创建新节点时更改节点的排序顺序。有关实现自己的处理程序的更多详细信息,请参阅

粗略的未经测试的示例,我相信您可以使其更加优雅,但应该为您指出正确的方向:

public class YourApplicationEventHandlerClassName : ApplicationEventHandler
{
    protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
      ContentService.Created += ContentServiceCreated;
    }

    private void ContentServiceCreated(IContentService sender, NewEventArgs<IContent> e)
    {
      var cs = ApplicationContext.Current.Services.ContentService;
      var content = e.Entity;
      var parentNode = content.Parent();

      content.SortOrder = parentNode.Children().OrderBy(n => n.SortOrder).First().SortOrder - 1;
      cs.Save(content);
    }
}
public类YourApplicationEventHandler类名:ApplicationEventHandler
{
受保护的覆盖无效应用程序已启动(UmbracoApplicationBase umbracoApplication、ApplicationContext ApplicationContext)
{
ContentService.Created+=ContentServiceCreated;
}
创建的私有void contentservices(IContentService发送方,NewEventArgs e)
{
var cs=ApplicationContext.Current.Services.ContentService;
var内容=e.实体;
var parentNode=content.Parent();
content.SortOrder=parentNode.Children().OrderBy(n=>n.SortOrder).First().SortOrder-1;
保存(内容);
}
}

创建的
ContentService.Created
事件对我不起作用。进行了一些战斗,但在
Umbraco
v7
中,我使用了
ContentService.Saved
事件,并对脏属性进行了一些双重检查,以确保不会陷入保存无限循环:

    private void ContentSaved(IContentService sender, SaveEventArgs<IContent> e)
    {
        foreach (var content in e.SavedEntities)
        {
            var dirty = (IRememberBeingDirty)content;
            var isNew = dirty.WasPropertyDirty("Id");
            if (!isNew) return;

            var parentNode = content.Parent();
            if (parentNode == null) return;
            var last = parentNode.Children().OrderBy(n => n.SortOrder).FirstOrDefault();
            if (last != null)
            {
                content.SortOrder = last.SortOrder - 1;
                if (content.Published)
                    sender.SaveAndPublishWithStatus(content);
                else
                    sender.Save(content);
            }
        }
    }

public class AppStartupHandler : ApplicationEventHandler
{
    protected override void ApplicationInitialized(UmbracoApplicationBase umbracoApplication,
        ApplicationContext applicationContext)
    {
        ContentService.Saved += ContentSaved;
    }
}
private void ContentSaved(IContentService发送方,SaveEventArgs e)
{
foreach(e.SavedEntities中的var内容)
{
var dirty=(IRememberBeingDirty)内容;
var isNew=dirty.WasPropertyDirty(“Id”);
如果(!isNew)返回;
var parentNode=content.Parent();
if(parentNode==null)返回;
var last=parentNode.Children().OrderBy(n=>n.SortOrder).FirstOrDefault();
if(last!=null)
{
content.SortOrder=last.SortOrder-1;
if(content.Published)
sender.SaveAndPublishWithStatus(内容);
其他的
保存(内容);
}
}
}
公共类AppStartupHandler:ApplicationEventHandler
{
受保护的覆盖无效应用程序初始化(UmbracoApplicationBase umbracoApplication,
应用程序上下文(应用程序上下文)
{
ContentService.Saved+=ContentSaved;
}
}

除了上面的示例之外,您最好先检查父节点是否有子节点,否则会出现空引用异常。谢谢。但该函数何时执行?在您提供的链接中,我没有看到ContentServiceCreated?您在文档中找不到它,因为EventHandler的实现取决于您,您可以像订阅任何其他事件一样订阅它们。我用一个更完整的例子更新了我的答案。如事件名称所示,它在创建任何节点时执行。