2015-08-31 3 views
1

Я создал кучу пользовательских шаблонов для хранения элементов (например, Industries, Subindustries и т. Д.) В Sitecore. Теперь я хочу загрузить их в мою модель Sitecore MVC.Sitecore Загрузите все элементы в модель MVC?


Списки расположены в Sitecore> Содержание> Списки. Например, в папке есть папка с именем Страна. Я хочу вернуть все предметы в пределахСтрана папка и заполнить их как неупорядоченный список на мой взгляд.


UPDATE: я реализовал метод Glass.Mapper.Sc предложил ниже. Сейчас он полностью работает.

Это то, что моя рабочая модель выглядит сейчас:

using Glass.Mapper.Sc.Configuration; 
using Glass.Mapper.Sc.Configuration.Attributes; 
using Sitecore.Data.Items; 
using Sitecore.Mvc.Presentation; 
using System; 
using System.Collections.Generic; 

namespace Sitecore.Web.Models 
{ 
    public class Registration: IRenderingModel 
    { 
     public Rendering Rendering { get; set; } 
     public Item Item { get; set; } 
     public Item PageItem { get; set; } 

     public IEnumerable<CountryChildItem> CountryList { get; set; } 

     [SitecoreType(AutoMap = true)] 
     public class CountryItem 
     { 
      public virtual IEnumerable<CountryChildItem> Children { get; set; } 
     } 

     [SitecoreType(AutoMap = true)] 
     public class CountryChildItem 
     { 
      [SitecoreId] 
      public virtual Guid Id { get; set; } 

      [SitecoreInfo(SitecoreInfoType.Path)] 
      public virtual string Path { get; set; } 

      [SitecoreField] 
      public virtual string DisplayName { get; set; } 

      [SitecoreField] 
      public virtual string Abbreviation { get; set; } 
     } 

     public void Initialize(Rendering rendering) 
     { 
      Rendering = rendering; 
      Item = rendering.Item; 
      PageItem = PageContext.Current.Item; 
     } 
    } 
} 

и это то, что мой рабочий Контроллер илит выглядит следующим образом:

using Glass.Mapper.Sc; 
using Sitecore.Web.Models; 
using System.Web.Mvc; 

namespace Sitecore.Web.Controllers 
{ 
    public class RegistrationController : Controller 
    { 
     Registration registrationModel = new Registration(); 

     public ActionResult Index() 
     { 
      ISitecoreContext sitecoreContext = new SitecoreContext(); 
      ISitecoreService service = new SitecoreService(sitecoreContext.Database); 
      Registration.CountryItem countryItem = service.GetItem<Registration.CountryItem>("/sitecore/content/Lists/Country"); 
      registrationModel.CountryList = countryItem.Children; 
      return View(registrationModel); 
     } 
    } 
} 

и фрагмент моего рабочего зрения:

<ul class="select-menu-options dropdown-menu"> 
    @foreach (var country in Model.CountryList) 
    { 
     <li><a href="#">@country.DisplayName</a></li> 
    } 
</ul> 
+0

Вопрос очень общий - может быть, список того, что вы уже пытались получить, чтобы получить данные? Многое будет зависеть от настройки вашего дерева контента Sitecore. –

+0

Добавлено обновление, где элементы находятся в дереве. Что касается «списка того, что вы пробовали», вот почему я разместил вопрос. –

ответ

2

Если бы я был на вашем месте, я бы заглянул в Glassmapper для Sitecore.

Это довольно легкий ORM для Sitecore.

http://www.glass.lu/Mapper/Sc

Я также предлагаю двигаться списки, расположенные в

sitecore > Templates > User Defined > Lists > Content 

некоторым где под либо

sitecore > Content 

или

sitecore > System 

(котором е версия делает более Sence)

UPDATE: Попробуйте добавить это выше своего класса:

[SitecoreType(AutoMap = true)] 
public class CountryItem 
{ 
    //... 
} 
0

Если вы измените CountryItem и другие классы модели наследовать от SearchResultItem так:

[PredefinedQuery("TemplateID", ComparisonType.Equal, "{ID-OF-CountryItem-TEMPLATE}", typeof(ID))] 
public class CountryItem : Sitecore.ContentSearch.SearchTypes.SearchResultItem 
{ 
    [IndexField("_displayname")] 
    public virtual string DisplayName { get; set; } 

    [IndexField("abbreviation")] 
    public string Abbreviation { get; set; } 
} 

You должны иметь возможность использовать индексы Sitecore для извлечения всех стран и других подобных списков:

private static string IndexName 
{ 
    get 
    { 
     return string.Format("sitecore_{0}_index", (Context.ContentDatabase ?? Context.Database).Name); 
    } 
} 

private static string Language { get { return Context.Language.Name; } } 

public IEnumerable<CountryItem> GetCountries() 
{ 
    using (var context = ContentSearchManager.GetIndex(IndexName).CreateSearchContext()) 
    { 
     IQueryable<CountryItem> queryable = context.GetQueryable<CountryItem>(); 
     queryable = queryable.Where(i => i.Language == Language); 
     queryable = queryable.Where(i => i.LatestVersion); 
     // ... maybe excluding standard values or some other filters 
     var searchResults = queryable.GetResults(); 
     return queryable.ToList(); 
    } 
} 

Обратите внимание, что это всего лишь пример. Вам нужно протестировать его и, скорее всего, адаптироваться к вашему решению.

И как отметил Дар Бретт, вы не должны хранить какие-либо элементы данных под узлом Templates.

+0

Перемещенные элементы контента и обновленный вопрос выше. –