Умбрако 6: Как поставить вновь созданный узел на вершину
В Umbraco 6, когда вы создаете новый узел, он помещается внизу.
Вы должны отсортировать его вручную, если хотите, чтобы он был сверху.
Как вы можете сделать так, чтобы новые узлы появлялись сверху по умолчанию?
2 ответа
ContentService.Created
событие не сработало для меня. Взял несколько сражений, но в v7
из Umbraco
Я использовал 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;
}
}
Вы можете создать обработчик событий, который изменяет порядок сортировки узлов при создании нового узла. См. События запуска приложения и регистрация событий для получения дополнительной информации о реализации собственного обработчика.
Грубый непроверенный пример, который, я уверен, вы могли бы сделать более элегантным, но должен указать вам правильное направление:
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);
}
}