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);
}
}
ContentService.Created
イベントは私にはうまくいきませんでした。いくつかの戦いがありましたが、v7
ofUmbraco
では、代わりにイベントを使用し、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;
}
}