Пример #1
0
        // Update tag field
        public void UpdateTagField(string userIput, string fieldName, Item tagRepository)
        {
            List <string> newInputData = userIput.Split('|').ToList();

            if (tagRepository.HasChildren)
            {
                Item        getTagRoot     = Sitecore.Configuration.Factory.GetDatabase("master").SelectSingleItem(TagRepository.Paths.FullPath);
                List <Item> getDescendants = getTagRoot.Axes.GetDescendants().Where(x => x.TemplateName == "Tag").ToList();

                // Get new tag list
                List <String> matchKey     = newInputData.Where(p => getDescendants.Any(p2 => p2.Name.ToLower() == ConvertName(p.Trim().ToLower()))).ToList();
                List <String> notMatchKey  = newInputData.Where(p => getDescendants.Any(p2 => p2.Name.ToLower() != ConvertName(p.Trim().ToLower()))).ToList();
                List <string> allTagItemId = new List <string>();
                notMatchKey.RemoveAll(r => matchKey.Any(r2 => r == r2));

                foreach (Item i in getDescendants)
                {
                    if (matchKey.Where(m => m.ToLower().ToString().Equals(i.Name.ToLower())).Any())
                    {
                        // Ignore other duplicated item having the same name
                        if (!allTagItemId.Where(a => CurrentDb.GetItem(a).Name.ToLower().Equals(i.Name.ToLower())).Any())
                        {
                            //Sitecore.Diagnostics.Log.Info("Match: " + i, this);
                            allTagItemId.Add(i.ID.ToString());
                        }
                    }
                }

                // Create new tag item
                foreach (string s in notMatchKey)
                {
                    if (!String.IsNullOrEmpty(s))
                    {
                        //Sitecore.Diagnostics.Log.Info("Not Match: " + s, this);
                        string       itemNameAndKey = ConvertName(s).ToLower();
                        TemplateItem tagTemplate    = CurrentDb.GetTemplate(TagTemplatePath.ID);
                        Item         newTag         = tagRepository.Add(itemNameAndKey.Trim(), tagTemplate);
                        allTagItemId.Add(newTag.ID.ToString());
                    }
                }

                // List of all assigned tags
                string outputList = allTagItemId.Aggregate((i, j) => i + "|" + j);
                using (new SecurityDisabler())
                {
                    CurrentPage.Editing.BeginEdit();
                    CurrentPage.Fields[fieldName].Value = outputList;
                    CurrentPage.Editing.EndEdit();
                    CurrentPage.Editing.AcceptChanges();
                }
            }
        }