2015-11-10 2 views
2

Я старался помещать определенные части элемента Content в представление. Мой вопрос заключается в том, как определить вид/форму cshtml для элемента контента, для которого я могу разместить каждую часть, где хочу. Рассмотрим следующий элемент контента:Orchard CMS Размещение деталей

item 
    - Text field 
    - Media field 

И следующий

<div class="my text"> 
    @Model.TextField1 
    <div class="media-item"> 
     @Model.MediaField 
    </div> 
</div> 
<p> Some text or stuf here or anyehere</p> 

Я не могу найти ни одного примера этого. Он должен быть основным представлением для контента с назначенными объектами для каждой части этого содержимого, но я считаю невозможным его реализовать (кстати, я не хочу использовать макеты).

ответ

2

Если у вас есть рабочий альтернативный, скажем, Content-MyContentType.cshtml, вы можете сделать следующее:

<div class="my text"> 
    @Display(Model.TextFields) 
    <div class="media-item"> 
     @Display(Model.Media) 
    </div> 
</div> 
<p> Some text or stuf here or anyehere</p> 

И тогда вы можете сделать в вашем placement.info:

<Match ContentType="MyContentType"> 
    <Place Fields_Common_Text="TextFields" /> 
    <Place Fields_MediaLibraryPicker="Media" /> 
</Match> 

Примечание

Я не уверен, какой тип полей ваши текстовые поля и/или ваши средства массовой информации, так что вы может потребоваться изменить поля Fields_Common_Text и Fields_MediaLibraryPicker для соответствия типам ваших полей.

+0

Я попытался использовать альтернативы, однако все части находятся в '@ Model.Content.Items', который является массивом. Невозможно выбрать, какую часть контента отображать в точном месте. Но ваше решение кажется фантастическим, я не знал, что могу это сделать в place.info (добавление непризнанных зон) – Arijoon

2

Ваш вопрос не содержит много деталей, чтобы действительно определить, что ваш вопрос, но здесь площадь несколько предложений:

Убедитесь, что ваш файл Placement.info до даты для DisplayType вы пытаетесь для использования, вот пример одного из моих:

<Placement> 
<Place Parts_McrfProfile_Edit="Content:3"/> 
<Place Parts_McrfProfile_Summary="Content:6"/> 
<Place Parts_McrfProfileList_Edit="Content:3"/> 
<Place Parts_McrfProfileList_Summary="Content:6"/> 
<Place Parts_McfProfile_List="Content:6"/> 

<Match DisplayType="Detail"> 
<!-- hide summary, show full content, for Detail --> 
<Place Parts_McrfProfile_Summary="-" 
     Parts_McrfProfileList_Summary="-" 
     Parts_McfProfile_List="-" 
     Parts_McrfProfile="Content:6" 
     Parts_McrfProfileList="Content:6" 
     /> 
<Place Parts_Common_Metadata="-"/> 
</Match> 

<Match DisplayType="Summary"> 
<Place Parts_Common_Metadata_Summary="-"/> 

</Match> 

<Match DisplayType="ListView"> 
    <Place Parts_Common_Metadata_Summary="-" 
     Parts_McrfProfile_Summary="-" 
     Parts_McrfProfileList_Summary="-" 
     Parts_McrfProfile="-" 
     Parts_McrfProfileList="-" 
     Parts_McrfProfile_List="Content:6"/> 
    </Match> 
</Placement> 

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

protected override DriverResult Display(
    McrfProfilePart part, string displayType, dynamic shapeHelper) 
    { 
     return Combined(
     ContentShape("Parts_McrfProfile", 
         () => 
         { 
          part.ProfileDetail = _profileService.GetProfileDetail(part.ProfileId); 

          McrfProfileDetailViewModel profileDetailViewModel = new McrfProfileDetailViewModel(); 

          profileDetailViewModel.ProfileDetail = part.ProfileDetail; 

          return shapeHelper.Parts_McrfProfile(ProfileDetail: profileDetailViewModel); 
          }), 
     ContentShape("Parts_McrfProfile_List", 
         () => 
         { 
          return shapeHelper.Parts_McrfProfile_List(ProfileRecord: part); 
         }), 
     ContentShape("Parts_McrfProfile_Summary", 
         () => 
         { 
          McrfProfileSummaryViewModel profileSummaryViewModel = new McrfProfileSummaryViewModel(); 

          List<int> profileID = new List<int>() { part.ProfileId }; 

          var summary = _profileService.GetProfileSummaryList(profileID).Where(e => e.ProfileID == part.ProfileId).First(); 

          profileSummaryViewModel.JobTitle = summary.JobTitle; 
          profileSummaryViewModel.Name = summary.Name; 
          profileSummaryViewModel.ProfileImage = summary.ProfileImage; 
          profileSummaryViewModel.ProfileID = summary.ProfileID; 

          return shapeHelper.Parts_McrfProfile_Summary(ProfileRecord: profileSummaryViewModel); 
         })); 

    } 

Наконец, если вы все сделали правильно, это и получают достоверные данные от вашей службы (или любыми средствами, вы получаете данные), вы должны быть в состоянии использовать свой вид следующим образом:

@{ 
Mcrf.Profiles.ViewModels.McrfProfileDetailViewModel part = Model.ProfileDetail; 
Style.Include("profile-styles.css?v=1.0").AtHead(); 
Style.Include("bootstrap.css?v=1.0").AtHead(); 
} 

@if (Model != null && part.ProfileDetail != null) 
{ 
<div> 
    <div > 
     <div class="profileImgDiv"> 
      @if (Model != null && part != null) 
      { 
       if (part.ProfileDetail.ProfileImage == null) 
       { 
        <img class="profile-img" src="~/Modules/Mcrf.Profiles/Content/Images/noProfilePictureImage.jpg" /> 
       } 
       else 
       { 
        <img class="profile-img" src="@Url.Content(part.ProfileDetail.ProfileImage)" /> 
       } 
      } 
     </div> 

и т.д., и т.д., и т.д.,

Я надеюсь, что это помогает,

Roka