Я создал пользовательскую часть и привязал ее к элементу сайта/элементу контента с помощью ActivatingFilter в обработчике моей части (аналогично тому, как описано here). Я также добавил пункт меню «Настройки», чтобы отредактировать деталь, переопределив метод GetItemMetadata обработчика и добавив для него объект GroupInfo. Это работает, и я могу редактировать свою часть, как ожидалось.Скрыть элемент из меню «Настройки»
Вот что обработчик моей стороны выглядит так:
public class ProductSettingsPartHandler : ContentHandler {
public ProductSettingsPartHandler() {
T = NullLocalizer.Instance;
Filters.Add(new ActivatingFilter<ProductSettingsPart>("Site"));
}
public Localizer T { get; set; }
protected override void GetItemMetadata(GetContentItemMetadataContext context) {
if (context.ContentItem.ContentType != "Site")
return;
base.GetItemMetadata(context);
// If I remove the following call, I can't use the site settings AdminController anymore.
// But if I make this call, a menu item will be added to the Settings section - which I don't want.
context.Metadata.EditorGroupInfo.Add(new GroupInfo(T("Pricing")) {
Id = "Pricing",
Position = "4.2"
});
}
}
Теперь я хотел бы, чтобы переместить элемент меню в другой раздел. Я могу создать новый пункт меню, выполнив INavigationProvider и предоставив ему маршрут к настройкам AdminController с моей стороны. Однако, когда я пытаюсь удалить исходный пункт меню из меню «Настройки» (больше не добавляя объект GroupInfo), моя новая ссылка на элемент меню больше не работает.
Основываясь на моих исследованиях, похоже, что настройки AdminController делают явную проверку, чтобы убедиться, что объект GroupInfo добавлен для части или он не вернет представление для его редактирования. Это, по-видимому, делает невозможным использование настроек AdminController для редактирования частей, прикрепленных к части содержимого сайта, но не отображающих их в разделе «Настройки».
Любые предложения или идеи о том, как обойти это? Моя конечная цель - обработать эту часть параметров сайта так же, как и любую другую, но иметь пункт меню, который используется для обновления его отображения в другом разделе меню администратора.
Я развиваюсь от ветки Orchard 1.x, если это имеет значение.
Спасибо!
Спасибо за ответ. На самом деле у меня это было, но он все еще отображает пункт меню в группе «Настройки». Кажется, что настройки администратора обрабатываются специально. – joshb
Если я не придумаю что-то лучше, я склоняюсь к подавлению Orchard.Core.Settings.AdminMenu и используя мою собственную версию, которая пропускает отображение пункта меню «Цены». Это кажется разумным? – joshb
@ joshb Это будет работать, но кажется довольно грязным. Лучше развернуть свой собственный контроллер.Это также было бы полезно, если бы вы захотели добавить дополнительные проверки разрешений, больше логики и т. Д. –