2012-07-30 14 views
5

MediaPickerFields wciąż mi umykają.Orchard CMS działa z MediaPickerField zdefiniowany w Migrations.cs

Mam zdefiniowane nową rolę w Migrations.cs i dodał Boolean kolumnę i MediaPickerField do części następująco:

SchemaBuilder.CreateTable("ImageContentPartRecord", table => 
      table.ContentPartRecord() 
      .Column("DisplayImage", DbType.Boolean)); 

ContentDefinitionManager.AlterPartDefinition("ImageContentPart", builder => 
      builder 
       .Attachable() 
       .WithField("ImageField", fld => 
        fld.OfType("MediaPickerField") 
        .WithDisplayName("Image"))); 

Zakładając mam ImageContentPart i ImageContentPartRecord klas, w jaki sposób można odzyskać dane z mojego MediaPickerField (adres URL, wymiary, tekst alternatywny, klasa itp.) w moim sterowniku i w moich szablonach części (edycja/wyświetlacz)?

tj - Parts.ImageContent.cshtml (chcę osiągnąć coś takiego):

<div> 
    <img src="@Model.ImageField.Url" alt="@Model.ImageField.Alt" /> 
</div> 

jakieś pomysły?

+1

Po pewnym kopaniu mam rozwiązanie. Wezmę to wkrótce. – chrisriesgo

Odpowiedz

4

Oto rozwiązanie:

W moim reklamowej metodą Driver I upewnij się, aby przekazać moje ImageContentPart (part) przy budowie ContentShape:

return ContentShape("Parts_ImageContent",() => 
      shapeHelper.Parts_ImageContent(
       Content: part)); 

Wtedy w moim szablonu widoku, ja wykorzystać dynamiczny charakter architektury Orcharda, by pochłonąć moją MediaPickerField. Aby to zrobić, należy uzyskać dostęp do właściwości .ContentItem na swojej części, a następnie opierając się na dynamice, łańcuch nazwy części (.ImageContentPart), a następnie nazwę pola (.ImageContent), aby uzyskać dostęp do pola.

@{ 
    // Attempting to access MediaPickerField named 'ImageContent' 
    var image = Model.Content.ContentItem.ImageContentPart.ImageContent; 

    // Leaning on Orchard dynamics to access properties of the field 
    var url = image.Url; 
} 

<img src="@url" alt="@T(image.AlternateText)" /> 

Oto pełny wykaz właściwości MediaPickerField z \\Orchard.Fields\Views\Fields\MediaPicker.cshtml:

@* 
    Alternate Text: @Model.ContentField.AlternateText 
    Class: @Model.ContentField.Class 
    Style: @Model.ContentField.Style 
    Alignment: @Model.ContentField.Alignment 
    Width: @Model.ContentField.Width 
    Height: @Model.ContentField.Height 
    Url: @Model.ContentField.Url 


    You can also display an image using this example, and add the attributes you need: 
    <img src="@Href(Model.ContentField.Url)" /> 
*@ 

Mamy nadzieję, że jeśli można natknąć się na podobny problem, to będzie pomóc!

Powiązane problemy