Пример #1
0
        public void Publishing(PublishContentContext context, FieldIndexPart fieldIndexPart)
        {
            foreach (var part in fieldIndexPart.ContentItem.Parts)
            {
                foreach (var field in part.PartDefinition.Fields)
                {
                    // get all drivers for the current field type
                    // the driver will describe what values of the field should be indexed
                    var drivers = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == field.FieldDefinition.Name)).ToList();

                    ContentPart localPart = part;
                    ContentPartFieldDefinition localField = field;
                    var membersContext = new DescribeMembersContext(
                        (storageName, storageType, displayName, description) => {
                        var fieldStorage = _fieldStorageProvider.BindStorage(localPart, localField);

                        // fieldStorage.Get<T>(storageName)
                        var getter     = typeof(IFieldStorage).GetMethod("Get").MakeGenericMethod(storageType);
                        var fieldValue = getter.Invoke(fieldStorage, new[] { storageName });

                        _fieldIndexService.Set(fieldIndexPart,
                                               localPart.PartDefinition.Name,
                                               localField.Name,
                                               storageName, fieldValue, storageType);
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
Пример #2
0
        public void Process(IEnumerable <int> contentItemIds, string partName, string fieldName, HiddenStringFieldSettings settings)
        {
            var parts = _contentManager.GetMany <ContentItem>(contentItemIds, VersionOptions.Published, new QueryHints())
                        .Select(ci => ci.Parts.FirstOrDefault(pa => pa.PartDefinition.Name == partName));

            if (settings.Tokenized)
            {
                foreach (var part in parts)
                {
                    var item = new KeyValuePair <HiddenStringField, Dictionary <string, object> >(
                        part.Fields.FirstOrDefault(fi => IsMyField(fi, fieldName)) as HiddenStringField,
                        new Dictionary <string, object> {
                        { "Content", part.ContentItem }
                    });
                    item.Key.Value = _tokenizer.Replace(settings.TemplateString, item.Value);
                    //Updates the index for projections
                    _fieldIndexService.Set(
                        part.ContentItem.As <FieldIndexPart>(),
                        part.PartDefinition.Name,
                        item.Key.Name,
                        "",
                        item.Key.Value,
                        typeof(string));
                }
            }
            else
            {
                foreach (var part in parts)
                {
                    var fields = part.Fields
                                 .Where(fi => IsMyField(fi, fieldName))
                                 .Select(fi => fi as HiddenStringField);
                    foreach (var field in fields)
                    {
                        field.Value = settings.TemplateString;
                        //Updates the index for projections
                        _fieldIndexService.Set(
                            part.ContentItem.As <FieldIndexPart>(),
                            part.PartDefinition.Name,
                            field.Name,
                            "",
                            field.Value,
                            typeof(string));
                    }
                }
            }
        }
Пример #3
0
 private void ProcessParts(string fieldName, IEnumerable <ContentPart> parts, string templateString)
 {
     foreach (var part in parts)
     {
         var fields = part.Fields
                      .Where(fi => fi is HiddenStringField && fi.Name.Equals(fieldName, StringComparison.OrdinalIgnoreCase))
                      .Select(fi => fi as HiddenStringField);
         foreach (var field in fields)
         {
             field.Value = templateString;
             // Updates the index for projections
             _fieldIndexService.Set(
                 part.ContentItem.As <FieldIndexPart>(),
                 part.PartDefinition.Name,
                 field.Name,
                 "",
                 field.Value,
                 typeof(string));
         }
     }
 }