2013-05-16 2 views
2

Мне нужно определить новый тип контента с полем таксономии на миграциях моего модуля. Я думаю, что мне нужно сделать что-то вроде этого:Orchard CMS: Как добавить поле таксономии к типу контента при миграции?

ContentDefinitionManager.AlterTypeDefinition("ContentTypeName", 
      cfg => cfg 
       .WithPart("TermsPart", builder => builder 
        .WithSetting(... 

Но я не мог заставить его работать.

ответ

8

Я, наконец, сделал это благодаря Giscard's answer. Важная информация, которую нужно знать о Orchard, заключается в том, что поле не может быть прикреплено к типу контента. Когда вы прикрепляете его к типу контента в пользовательском интерфейсе администратора, Orchard делает некоторые магии за кулисами, чтобы скрыть этот факт, он создает часть содержимого внутри этого типа контента с тем же именем, что и тип содержимого, а затем прикрепляет поле (s) к этой новой части контента.

Так вот решение:

 //Create new table for the new part 
     SchemaBuilder.CreateTable(typeof(SampleRecord).Name, table => table 
      .ContentPartRecord() 
      .Column("SampleColumn", DbType.String) 
     ); 

     //Attach field to the new part 
     ContentDefinitionManager.AlterPartDefinition(
      typeof(SamplePart).Name, 
      cfg => cfg 
       .Attachable() 
       .WithField("Topic", fcfg => fcfg 
        .OfType("TaxonomyField") 
        .WithDisplayName("Topic") 
        .WithSetting("Taxonomy", "Topics") 
        .WithSetting("LeavesOnly", "true") 
        .WithSetting("SingleChoice", "true") 
        .WithSetting("Required", "true")) 
      ); 

     //Attach part to the new Content Type 
     ContentDefinitionManager.AlterTypeDefinition("Sample", 
       cfg => cfg 
        .WithPart(typeof(SamplePart).Name 
       )); 

Я создал таблицу с колонкой под названием «SampleColumn», и я прикрепил поле «Тема» для систематики под названием «Тема». Надеюсь, это поможет кому-то еще.

+2

Кажется, что этот подход требует небольшой переделки для текущей версии Orchard (я использую 1.9) для правильного применения определенных настроек. Например. использование '.WithSetting (« Таксономия »,« Темы »)' не работает при использовании '.WithSetting (« TaxonomyFieldSettings.Taxonomy »,« Topics »)' работает. – ViRuSTriNiTy

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