Пример #1
0
        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);
        }
Пример #2
0
 private string GetFullUrl(FauxUrlSlugField f)
 {
     return($"{_urlProv.GetBaseWebsiteContentUrl()}{f.Slug?.Trim('/')}");
 }