CodePlexProject Hosting for Open Source Software
An unexpected error has occured.
There is an unsaved comment in progress. You will lose your changes if you continue. Are you sure you want to reopen the work item?
Resolved
No files are attached
nxtjv wrote Jun 25, 2012 at 5:27 AM
sebastienros wrote Jun 25, 2012 at 4:37 PM
nxtjv wrote Jun 25, 2012 at 7:56 PM
public interface ITokenProvider : IEventHandler { void Describe(dynamic context); void Evaluate(dynamic context); } public class TaxonomyTokens : ITokenProvider { private readonly IContentManager _contentManager; public TaxonomyTokens(IContentManager contentManager) { _contentManager = contentManager; } public Localizer T { get; set; } public void Describe(dynamic context) { context.For("TaxonomyField", T("Taxonomy Field"), T("Tokens for Taxonomy Fields")) .Token("Terms", T("Terms"), T("The text of the Terms.")) ; } public void Evaluate(dynamic context) { context.For<TaxonomyField>("TaxonomyField") .Token("Terms", (Func<TaxonomyField, object>)(field => field.Terms)) .Chain("Terms", "Terms", (Func<TaxonomyField, object>)(field => field.Terms)) ; } }
Jetski5822 wrote Dec 6, 2012 at 5:02 PM
mrtn_t wrote Jan 18 at 10:17 AM
using System; using System.Linq; using Orchard; using Orchard.ContentManagement; using Orchard.Environment.Extensions; using Orchard.Localization; using Orchard.Tokens; namespace Contrib.Taxonomies.Providers { /// <summary> /// Adds tokens: /// {Content.Taxonomies.*} /// /// tried with route: {Content.Taxonomies.Skupina}/{Content.Slug} this hit the code /// /// </summary> [OrchardFeature("Contrib.Taxonomies")] public class TaxonomyToken : ITokenProvider { public TaxonomyToken(IWorkContextAccessor workContextAccessor) { T = NullLocalizer.Instance; } public Localizer T { get; set; } public void Describe(DescribeContext context) { context.For("Content", T("Content"), T("Content")) .Token("Taxonomies.*", T("Taxonomies.<name>"), T("Name of taxonomy")); } public void Evaluate(EvaluateContext context) { context.For<IContent>("Content") .Token( token => token.StartsWith("Taxonomies.", StringComparison.OrdinalIgnoreCase) ? token.Substring("Taxonomies.".Length) : null, tryGetToken); } private string tryGetToken(string token, IContent content) { // this line is hit whenever token {Content.Taxonomies.*} is present try { var term = content.As<Models.TermsPart>(); if (term == null) return string.Empty; var t = term.Terms.FirstOrDefault(x => x.Field == token); if (t == null) return string.Empty; // here I get //?t //{Contrib.Taxonomies.Models.TermContentItem} // Field: "Skupina" // Id: 0 // TermRecord: {Contrib.Taxonomies.Models.TermPartRecord} // TermsPartRecord: {Contrib.Taxonomies.Models.TermsPartRecord} //?t.TermRecord //{Contrib.Taxonomies.Models.TermPartRecord} // base {Orchard.ContentManagement.Records.ContentPartRecord}: {Contrib.Taxonomies.Models.TermPartRecord} // Count: 2 // Path: "/" // Selectable: true // TaxonomyId: 77 // Weight: 0 return "abc"; } catch (Exception e) { return string.Empty; } } } }
Timbioz wrote Feb 19 at 4:31 AM
mrtn_t wrote Feb 19 at 7:33 AM
using System; using Contrib.Taxonomies.Services; using Orchard; using Orchard.ContentManagement; using Orchard.Environment.Extensions; using Orchard.Localization; using Orchard.Tokens; namespace Contrib.Taxonomies.Providers { /// <summary> /// Adds tokens: /// {Content.Taxonomies.*} /// /// tried with route: {Content.Taxonomies.Skupina}/{Content.Slug} this hit the code /// /// </summary> [OrchardFeature("Contrib.Taxonomies")] public class TaxonomyToken : ITokenProvider { private readonly IWorkContextAccessor _workContextAccessor; private readonly ITaxonomyService _taxonomyService; public TaxonomyToken( IWorkContextAccessor workContextAccessor, ITaxonomyService taxonomyService) { _workContextAccessor = workContextAccessor; ; _taxonomyService = taxonomyService; T = NullLocalizer.Instance; } public Localizer T { get; set; } public void Describe(DescribeContext context) { context.For("Content", T("Content"), T("Content")) .Token("Taxonomies.*", T("Taxonomies.<name>"), T("Name of taxonomy")); } public void Evaluate(EvaluateContext context) { context.For<IContent>("Content") .Token( token => token.StartsWith("Taxonomies.", StringComparison.OrdinalIgnoreCase) ? token.Substring("Taxonomies.".Length) : null, TryGetToken); } private string TryGetToken(string token, IContent content) { // this line is hit whenever token {Content.Taxonomies.*} is present try { /* * this will not work, because content is not stored yet * We read values directly from content of request */ var fieldName = String.Format("Page.{0}.SingleTermId", token); var request = _workContextAccessor.GetContext().HttpContext.Request; var param = request[fieldName]; var id = 0; if (!int.TryParse(param, out id)) return string.Empty; var term = _taxonomyService.GetTerm(id); if (term == null) return string.Empty; var taxonomy = _taxonomyService.GetTaxonomy(term.TaxonomyId); if (taxonomy == null) return string.Empty; var slug = term.Slug; if (!String.IsNullOrEmpty(taxonomy.Slug) && slug.Contains(taxonomy.Slug)) slug = slug.Replace(taxonomy.Slug + "/", ""); return slug; } catch (Exception e) { return string.Empty; } } } }
mrtn_t wrote Feb 19 at 7:38 AM
sebastienros wrote Feb 19 at 7:00 PM
gbas wrote Mar 20 at 11:25 AM
arbitrix wrote Apr 8 at 8:19 PM
BrentCarter wrote Apr 30 at 4:24 AM
Sign in to add a comment or to set email notifications
Keyboard shortcuts are available for this page.