2014-01-03 5 views
3

Я создал пользовательскую часть и привязал ее к элементу сайта/элементу контента с помощью 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, если это имеет значение.

Спасибо!

ответ

2

Чтобы отобразить данный редактор детали на определенной группе только заменить

ContentShape("<your editor name>",() => ...); 

с

ContentShape("<your editor name>",() => ...).OnGroup("Pricing"); 

внутри метода редактора драйвера для вашей части. В дополнение к тому, что вы уже сделали с обработчиком выше.

UPDATE:

После перечитывая свой вопрос еще дважды, я думаю, что я сначала не понял проблему. Вы хотите, чтобы AdminController продолжал работать, но предоставленная группа не должна отображаться в разделе «Настройки».

Это невозможно без переопределения поведения по умолчанию для Orchard. Настройки по умолчанию AdminController требует существования группы, которая, в свою очередь, всегда отображается в меню.

Самое простое решение - создать свой собственный контроллер, на который вы укажете ссылку администратора. Копирование и вставка текущего AdminController и удаление всех проверок, связанных с GroupInfo, должны сделать трюк.

+0

Спасибо за ответ. На самом деле у меня это было, но он все еще отображает пункт меню в группе «Настройки». Кажется, что настройки администратора обрабатываются специально. – joshb

+0

Если я не придумаю что-то лучше, я склоняюсь к подавлению Orchard.Core.Settings.AdminMenu и используя мою собственную версию, которая пропускает отображение пункта меню «Цены». Это кажется разумным? – joshb

+0

@ joshb Это будет работать, но кажется довольно грязным. Лучше развернуть свой собственный контроллер.Это также было бы полезно, если бы вы захотели добавить дополнительные проверки разрешений, больше логики и т. Д. –

Смежные вопросы