2014-07-03 7 views
1

Я создаю новую часть, для которой требуется таксономия.Orchard CMS Миграции и таксономии

Легко прикрепить поле таксономии в миграции:

ContentDefinitionManager.AlterPartDefinition("RecipePart", part => part 
    .WithField("Categoria", cfg => cfg 
     .OfType("TaxonomyField") 
     .WithSetting("TaxonomyFieldSettings.AllowCustomTerms", "false") 
     .WithSetting("TaxonomyFieldSettings.SingleChoice", "false") 
     .WithSetting("TaxonomyFieldSettings.LeavesOnly", "true") 
     .WithSetting("TaxonomyFieldSettings.Required", "true") 
     .WithSetting("TaxonomyFieldSettings.Taxonomy", "Ricette Categorie")) 
    .WithDescription("Categorie ricette.")); 

Но ... мне нужно вручную создать таксономию и связанные с ним термины.

Можно ли проверить, существует ли таксономия (например, «Ricette Categorie» в этом примере) и, если не найден, добавить один с некоторыми стандартными условиями, чтобы часть была готова к использованию без ручного вмешательства? Thanks

ответ

3

Вы ищете что-то вроде этого?

var itemTypeTaxonomy = _taxonomyService.GetTaxonomyByName("ItemType"); 
if (itemTypeTaxonomy == null) 
{ 
    itemTypeTaxonomy = _orchardServices.ContentManager.New("Taxonomy").As<TaxonomyPart>(); 
    itemTypeTaxonomy.Name = "ItemType"; 
    itemTypeTaxonomy.ContentItem.As<TitlePart>().Title = "ItemType"; 
    _taxonomyService.CreateTermContentType(itemTypeTaxonomy); 
    _orchardServices.ContentManager.Create(itemTypeTaxonomy); 
    _orchardServices.ContentManager.Publish(itemTypeTaxonomy.ContentItem); 
} 

ContentDefinitionManager.AlterPartDefinition("StandardItemPart", cfg => cfg 
    .WithField("Description", field => field.OfType("HtmlField")) 
    .WithField("Thumbnail", field => field.OfType("MediaPickerField")) 
    .WithField("Length", field => field.OfType("TextField")) 
    .WithField("Type", field => field.OfType("TaxonomyField").WithSetting("FieldIndexing.Included", "True") 
                   .WithSetting("TaxonomyFieldSettings.TaxonomyId", itemTypeTaxonomy.Id.ToString()) 
                   .WithSetting("TaxonomyFieldSettings.LeavesOnly", "True") 
                   .WithSetting("TaxonomyFieldSettings.SingleChoice", "True"))); 

Это для старого модуля Taxonomies когда RoutePart еще существовал, который теперь был заменен AutoroutePart, но идея есть

+0

Хорошо для создания таксономии ... Мне теперь нужно выяснить, как создавать термины ... – manudea

1

Спасибо Хазза указать меня в правильном направлении ...

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

private void CreateTaxonomy(string taxonomyName, string[] terms) 
    { 
     var taxonomy = _taxonomyService.GetTaxonomyByName(taxonomyName); 

     if (taxonomy == null) 
     { 
      taxonomy = _orchardServices.ContentManager.New("Taxonomy").As<TaxonomyPart>(); 
      taxonomy.Name = taxonomyName; 
      taxonomy.ContentItem.As<TitlePart>().Title = taxonomyName; 
      _taxonomyService.CreateTermContentType(taxonomy); 
      _orchardServices.ContentManager.Create(taxonomy); 
      _orchardServices.ContentManager.Publish(taxonomy.ContentItem); 
     } 

     foreach (var term in terms) 
     { 
      GetOrCreateTerm(taxonomy.Id, term); 
     } 
    } 

GetOrCreateTerm частный метод, который я создал после оригинальной один на Орчард Source (TaxonomyFieldDriver.cs)

0

Ниже код, чтобы создать таксономию и условие

public void Enabled(Feature feature) { 
    if (_taxonomyService.GetTaxonomyByName("Genre") == null) { 


     var tax = _contentManager.New<TaxonomyPart>("Taxonomy"); 
     tax.Name = "Genre"; 
     _contentManager.Create(tax, VersionOptions.Published); 

     CreateTerm(tax, "Action"); 
     CreateTerm(tax, "Comedy"); 
     CreateTerm(tax, "Drama"); 
     CreateTerm(tax, "Panaorama"); 
     CreateTerm(tax, "Shikorama"); 
    } 

} 

private void CreateTerm(TaxonomyPart tax, string termName) { 
    var term = _taxonomyService.NewTerm(tax); 
    term.Name = termName; 
    _contentManager.Create(term, VersionOptions.Published); 
} 

Я добавил этот код в FeatureEventHandler класса моего модуля, так что он работает, когда я включаю функция.

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