public ContentField GetModel(ProtoContent content, ContentFieldDefinition fieldDefinition) { var mdl = new FauxUrlSlugField(); var ct = fieldDefinition.ContentType; var fcfg = fieldDefinition.Config.DirectCastTo <FauxUrlSlugFieldConfiguration>(); var slugPatternParts = fcfg.SlugPattern.Trim('/').Split('/'); var slugParts = new List <string>(); foreach (var spp in slugPatternParts) { if (spp == ID_PATTERN_PART) { var cid = content.Id.Replace("-", ""); var pt = cid.Length <= fcfg.ContentIdSlugPartLength ? cid : cid.Substring(0, fcfg.ContentIdSlugPartLength); if (!string.IsNullOrWhiteSpace(pt)) { slugParts.Add(pt); } continue; } var matchSimple = PartPatternSimpleRegex.Match(spp); if (matchSimple.Success) { var fieldName = matchSimple.Groups["fieldName"].Value; var slugGenFieldDef = ct.Fields.First(x => x.FieldName == fieldName); var slugGenField = slugGenFieldDef.FieldFinder().GetModel(content, slugGenFieldDef) .DirectCastTo <IFauxUrlSlugGenerator>(); var pt = slugGenField?.GenerateFauxUrlSlugPart(null, slugGenFieldDef); if (!string.IsNullOrWhiteSpace(pt)) { slugParts.Add(pt); } continue; } var matchComplex = PartPatternComplexRegex.Match(spp); if (matchComplex.Success) { var fieldName = matchComplex.Groups["fieldName"].Value; var slugGenFieldDef = ct.Fields.First(x => x.FieldName == fieldName); var slugGenField = slugGenFieldDef.FieldFinder().GetModel(content, slugGenFieldDef) .DirectCastTo <IFauxUrlSlugGenerator>(); var slugGenParam = matchComplex.Groups["slugGeneratorParam"].Value; var pt = slugGenField?.GenerateFauxUrlSlugPart(slugGenParam, slugGenFieldDef); if (!string.IsNullOrWhiteSpace(pt)) { slugParts.Add(pt); } continue; } slugParts.Add(spp); } mdl.Slug = string.Join("/", slugParts); return(mdl); }
private string GetFullUrl(FauxUrlSlugField f) { return($"{_urlProv.GetBaseWebsiteContentUrl()}{f.Slug?.Trim('/')}"); }