1

Создал пользовательский модуль в Orchard CMS (1.10), который предоставляет конечную точку API. Я хотел бы показать вызов Get, где, если я передаю идентификатор элемента контента, он вернет Html этого элемента контента.Orchard CMS - Возвращение HTML в вызове API

Я также хотел бы знать, как я могу вернуть HTML-макет страницы в API-вызов?

Спасибо

+0

Интересно, что такое * API-модуль *? Пожалуйста, дайте более подробную информацию. Также почему вы помечаете вопрос как Orchard 1.6, 1.8, но тогда вы пишете 1.10? Итак, какую версию вы используете? – ViRuSTriNiTy

+0

Получить элемент через contentManager, создать форму и использовать и экземпляр IShapeDisplay.Display (myShape). Верните его как закодированную строку или все, что вам нужно. – Xceno

ответ

2

Я уверен, что вы спрашиваете именно то, что Display метод ItemController в Orchard.Core.Contents.Controllers делает:

public ActionResult Display(int? id, int? version) { 
    if (id == null) 
     return HttpNotFound(); 

    if (version.HasValue) 
     return Preview(id, version); 

    var contentItem = _contentManager.Get(id.Value, VersionOptions.Published); 

    if (contentItem == null) 
     return HttpNotFound(); 

    if (!Services.Authorizer.Authorize(Permissions.ViewContent, contentItem, T("Cannot view content"))) { 
     return new HttpUnauthorizedResult(); 
    } 

    var model = _contentManager.BuildDisplay(contentItem); 
    if (_hca.Current().Request.IsAjaxRequest()) { 
     return new ShapePartialResult(this,model); 
    } 

    return View(model); 
} 

код мнение, заключается в следующем:

@using Orchard.ContentManagement 
@using Orchard.Utility.Extensions 
@{ 
    ContentItem contentItem = Model.ContentItem; 
    Html.AddPageClassNames("detail-" + contentItem.ContentType.HtmlClassify()); 
}@Display(Model) 
+0

Вау, мне было трудно найти этот ответ! Именно то, что мне нужно. – Nathan

3

Я думаю, что вам нужно:

public class HTMLAPIController : Controller { 
    private readonly IContentManager _contentManager; 
    private readonly IShapeDisplay _shapeDisplay; 
    private readonly IWorkContextAccessor _workContextAccessor; 

    public HTMLAPIController(
     IContentManager contentManager, 
     IShapeDisplay shapeDisplay, 
     IWorkContextAccessor workContextAccessor) { 
     _contentManager = contentManager; 
     _shapeDisplay = shapeDisplay; 
     _workContextAccessor = workContextAccessor; 
    } 

    public ActionResult Get(int id) { 
     var contentItem = _contentManager.Get(id); 

     if (contentItem == null) { 
      return null; 
     } 

     var model = _contentManager.BuildDisplay(contentItem); 

     return Json(
      new { htmlString = _shapeDisplay.Display(model) }, 
      JsonRequestBehavior.AllowGet); 
    } 

    public ActionResult GetLayout() { 
     var layout = _workContextAccessor.GetContext().Layout; 

     if (layout == null) { 
      return null; 
     } 

     // Here you can add widgets to layout shape 

     return Json(
      new { htmlString = _shapeDisplay.Display(layout) }, 
      JsonRequestBehavior.AllowGet); 
    } 
}