如何使用Sitecore Include文件修补属性值

时间:2013-05-25 20:31:47

标签: sitecore sitecore6

我需要创建一个Sitecore包补丁文件,以便将字符串添加到web.config中IgnoreUrlPrefixes设置的现有值属性中。

我试图使用以下包含文件完全覆盖默认的忽略前缀:

<?xml version="1.0"?>
    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
        <sitecore>
            <settings>
                <setting name="IgnoreUrlPrefixes">
                    <patch:attribute name="value">/foo/|/sitecore/default.aspx|/trace.axd|/webresource.axd|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.DialogHandler.aspx|/sitecore/shell/applications/content manager/telerik.web.ui.dialoghandler.aspx|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.SpellCheckHandler.axd|/Telerik.Web.UI.WebResource.axd|/sitecore/admin/upgrade/|/layouts/testing</patch:attribute>
                </setting>
            </settings>
        </sitecore>
    </configuration>
</settings>

其中/foo/是我要添加到默认前缀的url前缀。 ShowConfig.aspx表示尚未应用修改后的配置。

理想情况下,我希望能够将/foo/简单地添加到存在的任何值作为默认IgnoreUrlPrefixes值。有谁知道这是否可行以及如何在Sitecore补丁语法中指定它?

2 个答案:

答案 0 :(得分:12)

Sitecore 的所有可能性的良好解释包括配置文件,可在此John West blog post中找到。

您可以在链接的帖子中找到:

patch:attribute: Define or replace the specified attribute.

它不允许“将/foo/添加到默认的IgnoreUrlPrefixes”属性中。

答案 1 :(得分:3)

我最近遇到了同样的问题,似乎Mark Ursino在这个特定问题上发布了一个博客:

http://firebreaksice.com/sitecore-patchable-ignore-lists/

在他的示例中,他在默认的Sitecore之后执行自定义管道以更新值。

  

相反,我创建了一个新的管道处理器   内置的(它将支持现有的本机IgnoreUrlPrefixes   设置)并允许您通过自己的XML配置添加每个路径   节点。这里的优点是你可以修补并继续修补   无需复制现有值。

示例补丁文件:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <httpRequestBegin>
        <processor type="Sitecore.PatchableIgnoreList.ProcessPatchedIgnores, Sitecore.PatchableIgnoreList"
                   patch:after="processor[@type='Sitecore.Pipelines.HttpRequest.IgnoreList, Sitecore.Kernel']">
          <Paths hint="list:AddPaths">
            <foo>/foo</foo>
            <bar>/bar</bar>
          </Paths>
        </processor>
      </httpRequestBegin>
    </pipelines>
  </sitecore>
</configuration>

管道处理器的源代码,来自博客:

using Sitecore.Collections;
using Sitecore.Pipelines.HttpRequest;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Sitecore.PatchableIgnoreList
{
    public class ProcessPatchedIgnores : HttpRequestProcessor
    {
        private List<string> _paths = new List<string>();

        public override void Process(HttpRequestArgs args)
        {
            string filePath = args.Url.FilePath;

            foreach (string path in _paths)
            {
                if (filePath.StartsWith(path, StringComparison.OrdinalIgnoreCase))
                {
                    args.AbortPipeline();
                    return;
                }
            }
        }

        public void AddPaths(string path)
        {
            if (!string.IsNullOrEmpty(path) && !_paths.Contains(path))
            {
                _paths.Add(path);
            }
        }
    }
}