mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
#19702: Fixing Taxonomy fields tokens for newly created content
Work Item: 19702
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
using System.Linq;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using Orchard.Taxonomies.Fields;
|
using Orchard.Taxonomies.Fields;
|
||||||
using Orchard.Taxonomies.Models;
|
using Orchard.Taxonomies.Models;
|
||||||
using Orchard.Taxonomies.Services;
|
using Orchard.Taxonomies.Services;
|
||||||
@@ -26,19 +27,9 @@ namespace Orchard.Taxonomies.Handlers {
|
|||||||
OnUnpublished<TermsPart>((context, part) => RecalculateCount(taxonomyService, part));
|
OnUnpublished<TermsPart>((context, part) => RecalculateCount(taxonomyService, part));
|
||||||
OnRemoved<TermsPart>((context, part) => RecalculateCount(taxonomyService, part));
|
OnRemoved<TermsPart>((context, part) => RecalculateCount(taxonomyService, part));
|
||||||
|
|
||||||
// Tells how to load the field terms on demand
|
// Tells how to load the field terms on demand, when a content item it loaded or when it has been created
|
||||||
OnLoaded<TermsPart>((context, part) => {
|
OnLoaded<TermsPart>((context, part) => InitializerTermsLoader(part));
|
||||||
foreach (var field in part.ContentItem.Parts.SelectMany(p => p.Fields).OfType<TaxonomyField>()) {
|
OnCreated<TermsPart>((context, part) => InitializerTermsLoader(part));
|
||||||
var tempField = field.Name;
|
|
||||||
var fieldTermRecordIds = part.Record.Terms.Where(t => t.Field == tempField).Select(tci => tci.TermRecord.Id);
|
|
||||||
field.TermsField.Loader(value => fieldTermRecordIds.Select(id => _contentManager.Get<TermPart>(id)).ToList());
|
|
||||||
}
|
|
||||||
|
|
||||||
part._termParts.Loader(value =>
|
|
||||||
part.Terms.Select(
|
|
||||||
x => new TermContentItemPart { Field = x.Field, TermPart = _contentManager.Get<TermPart>(x.TermRecord.Id) }
|
|
||||||
));
|
|
||||||
});
|
|
||||||
|
|
||||||
OnIndexing<TermsPart>(
|
OnIndexing<TermsPart>(
|
||||||
(context, part) => {
|
(context, part) => {
|
||||||
@@ -55,6 +46,19 @@ namespace Orchard.Taxonomies.Handlers {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void InitializerTermsLoader(TermsPart part) {
|
||||||
|
foreach (var field in part.ContentItem.Parts.SelectMany(p => p.Fields).OfType<TaxonomyField>()) {
|
||||||
|
var tempField = field.Name;
|
||||||
|
var fieldTermRecordIds = part.Record.Terms.Where(t => t.Field == tempField).Select(tci => tci.TermRecord.Id);
|
||||||
|
field.TermsField.Loader(value => fieldTermRecordIds.Select(id => _contentManager.Get<TermPart>(id)).ToList());
|
||||||
|
}
|
||||||
|
|
||||||
|
part._termParts.Loader(value =>
|
||||||
|
part.Terms.Select(
|
||||||
|
x => new TermContentItemPart { Field = x.Field, TermPart = _contentManager.Get<TermPart>(x.TermRecord.Id) }
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
private static void RecalculateCount(ITaxonomyService taxonomyService, TermsPart part) {
|
private static void RecalculateCount(ITaxonomyService taxonomyService, TermsPart part) {
|
||||||
foreach (var term in part.Terms) {
|
foreach (var term in part.Terms) {
|
||||||
var termPart = taxonomyService.GetTerm(term.TermRecord.Id);
|
var termPart = taxonomyService.GetTerm(term.TermRecord.Id);
|
||||||
|
Reference in New Issue
Block a user