2013-05-30 2 views
1

В Orchard CMS я могу создать деталь и сварить ее на сайте с помощью Filters.Add(new ActivatingFilter<TermsAndConditionSettingsPart>("Site")); и показать, что редактор этой части отображается в настройках сайта.Как сварить часть страницы администратора в Orchard CMS

У меня также есть несколько страниц на экранах моего администратора, в которых я использовал контроллеры и действия, чтобы позволить пользователям редактировать настройки для моих модулей.

Мне интересно, как я могу сварить деталь на одной из моих пользовательских страниц администрирования. Я думаю, что мне нужно сделать что-то похожее на упомянутый выше код, но я не слишком уверен, с чем мне нужно сваривать (например, что я должен заменить «Сайт»)? Нужно ли создавать тип контента для каждой из моих страниц администратора?

Любая помощь будет оценена по достоинству.

ответ

4

Изучив дальнейшие и с учетом превосходного ответа @ Piotr, мне удалось добиться того, что я хотел сделать.

Шаг 1: Миграции

private readonly IOrchardServices _services; 

    public Migrations(IOrchardServices services) { 
     _services = services; 
    } 

    public int Create() 
    { 
     ContentDefinitionManager.AlterTypeDefinition("PlayerSearch", cfg => { }); 

     var content = _services.ContentManager.New("PlayerSearch"); 
     _services.ContentManager.Create(content); 

     return 1; 
    } 

В приведенном выше примере, "PlayerSearch" это имя моего типа контента (то есть элемент I будет сварка мои части к). Этот код просто создает тип PlayerSearch и создает один экземпляр его, который затем сохраняется.

Шаг 2: ContentPart

Я создал простой класс POCO как ContentPart. Это то, что я хочу, чтобы сварить на мою страницу PlayerSearch:

public class PlayerSearchPart : ContentPart 
{ 
    public string String1 { get; set; } 
    public string String2 { get; set; } 
    public string String3 { get; set; } 
    public int Int1 { get; set; } 
    public int Int2 { get; set; } 
    public int Int3 { get; set; }  
} 

Шаг 3: ContentHandler

Следующая вещь, которую я сделал, было сварить мой PlayerSearchPart к моему PlayerSearch типа, как это определено в миграции:

public class PlayerSearchHandler : ContentHandler 
{ 
    public PlayerSearchHandler() 
    { 
     Filters.Add(new ActivatingFilter<PlayerSearchPart>("PlayerSearch")); 
    } 
} 

Я сделал это в ContentHandler с помощью ActivatingFilter.

Шаг 4: Контроллер

Теперь нам нужно создать страницу на экранах администратора, который способен отображать все сваренные части к пользователю:

private readonly IOrchardServices _services; 

    public PlayerManagementController(IOrchardServices services) { 
     _services = services; 
    } 

    [HttpGet] 
    public ActionResult PlayerSearch() 
    { 
     var playerSearchType = _services.ContentManager.Query().ForType(new[] {"PlayerSearch"}).Slice(0, 1).FirstOrDefault(); 
     var model = _services.ContentManager.BuildEditor(playerSearchType); 

     // Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation. 
     return View((object)model); 
    } 

Это действие извлекающего экземпляр моего типа PlayerSearch, который я создал в файле Migrations, строит для него редактор, а затем передает его в представление.

Шаг 5: взгляд

Наши действия, конечно, нуждается в представлении, и это довольно просто, как только вы знаете, как:

@using (Html.BeginFormAntiForgeryPost()) { 
    @Html.ValidationSummary() 
    @Display(Model.Content) 
    <fieldset> 
     <button class="primaryAction" type="submit">@T("Save")</button> 
    </fieldset> 
} 

Шаг 6: Драйвер

Здесь нет ничего необычного:

// GET 
    protected override DriverResult Editor(PlayerSearchPart part, dynamic shapeHelper) 
    { 
     return ContentShape("Parts_PlayerSearch_Edit", 
      () => shapeHelper.EditorTemplate(
       TemplateName: "Parts/PlayerSearch", 
       Model: part, 
       Prefix: Prefix)); 
    } 

    // POST 
    protected override DriverResult Editor(PlayerSearchPart part, IUpdateModel updater, dynamic shapeHelper) 
    { 
     updater.TryUpdateModel(part, Prefix, null, null); 
     return Editor(part, shapeHelper); 
    } 

Шаг 7: Отображение редактора для вашей части

Последний шаг заключается в создании шаблона редактора для вашей части, а также гарантировать, что у вас есть запись в вашем placement.info для части, так что сад знает, где это сделать.

Эта техника была взята из того, как работают настройки сайта. Чтобы посмотреть на это и посмотреть, как работает Post action, посмотрите на контроллер по адресу Orchard.Core.Settings.Controllers.AdminController.

3

Вы не можете сваривать что-либо на пользовательской странице - это не работает.

Детали свариваются на элементы контента, такие как Site. Site ничем не отличается от других элементов контента, таких как User, Page и т. Д., За одним исключением - всегда имеется один номер Site для каждого арендатора. То, что вы на самом деле видите, когда вы переходите в любой раздел в Настройки является редактором для этого элемента (и каждый раздел отображает часть этого редактора, которая соответствует именованной группе). И эта функциональность специфична только для Site.

Если вам нужны настройки на сайте, лучший способ - всегда сваривать детали на предмет Site. Затем вы можете предоставить ссылки (или вкладки и т. Д.), Которые указывают на этот конкретный редактор из ваших пользовательских представлений.

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