2014-10-23 4 views
0

Привет еще раз :) Мой следующий вопрос о Orchard CMS выглядит тривиальным, но ..Orchard CMS: добавить изображение в пользовательский элемент

У меня есть пользовательский NewsModule с NewsItem типа, который состоит из TitlePart, BodyPrt, и мой заказ NewsPart , NewsPart основан на NewsPartRecord.

Теперь я должен расширить свой тип документа NewsItem с помощью Image. До сих пор я обнаружил, что есть ImagePart и MediaLibraryPickerField. ImagePart магазины width и heihgt изображения, поэтому я думаю, что это что-то для внутреннего использования.

Следующий MediaLibraryPickerField. Некоторое время спустя я нашел, что могу расширить свой NewsPart, используя метод WithField(). Но! Первый вопрос: когда я настраиваю тип Page с пользовательским интерфейсом администратора, я могу добавить поле в type. Но используя Migrations Не могу добавить поле в NewsItem, только до NewsPart.

Второй вопрос здесь. MediaLibraryPicker позволяет мне выбирать любой тип файла из библиотеки, изображения, текста, почтового индекса или любого другого. И это не то, что мне действительно нужно.

Итак, какие лучшие практики в Orchard расширить элементы с иконками?

спасибо.

+1

ОК, когда вы добавляете поля в 'type' в пользовательском интерфейсе администратора, orchard создает новую' part' с тем же именем, что и 'type'. поэтому первый вопрос разрешен, и я могу добавить поле только к 'Part' – teran

+0

Вы должны задавать вопросы по одному. Запрашивать двоих в значительной степени гарантировано, чтобы дать вам ответы только на один из ваших вопросов, и это делает сообщение менее эффективным для googlable. Поле выбора медиаданных имеет настройку ограничения типов медиаконтента, которые могут быть выбраны. –

ответ

2

Вы можете добавлять поля в NewsItem, для этого требуется другой тип определения. Это тоже смутило меня, поскольку это не так интуитивно, как хотелось бы.

Чтобы добавить детали, которые вы используете AlterTypeDefinition.

this.ContentDefinitionManager.AlterTypeDefinition(
    "NewsItem", 
    cfg => cfg.WithPart("NewsPart")); 

Но для добавления полей вы должны также использовать AlterPartDefinition и указать статьи новостей не NewsPart.

this.ContentDefinitionManager.AlterPartDefinition(
    "NewsItem", 
    builder => 
     builder.WithField(
      "NewsImages", 
      fieldBuilder => 
       fieldBuilder.OfType("MediaLibraryPickerField") 
       .WithDisplayName("News Images") 
       // Allow multiple images 
       .WithSetting("MediaLibraryPickerFieldSettings.Multiple", "true")) 

Учитывая второй вопрос, MediaLibraryPickerField имеет возможность отображать только выбранные типы/части.

.WithSetting(MediaLibraryPickerFieldSettings.DisplayedContentTypes="Document,Video") 

Если вам нужны новые средства массовой информации типа вы должны создать новые ContentType с Стереотип «Медиа», он также нуждается в «MediaPart» и часть, которая определяет метаданные для данного типа. Вы можете посмотреть, как Документ или Видеоролик определен для примера кода.

+0

добавление 'MediaLibraryPickerField' в' part' очевидно, конечно, это не проблема. В первой части я спросил, как добавить поле в «Тип», но я уже нашел, что это невозможно. Учитывая вторую часть, я раньше не читал о 'DisplayContentTypes', поэтому большое спасибо, кажется, это именно то, что мне нужно. – teran

+0

какое значение DisplayDContentTypes' следует использовать для фильтрации изображений? попробовал 'Image', но не работает. Не можете найти их в исходном коде – teran

+0

Вы меня не поняли, вы можете добавлять поля в 'Type' через' AlterPartDefinition'. Это запутанно по имени, его можно использовать для добавления полей для ввода. Просто не ставьте в качестве первого имени параметра часть, а имя типа aka «NewsItem». Я не знаю, как это сказать. – Xeevis

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