Sitecore 8 辅助I - 如何使用patch文件修改Sitecore Pipeline及其配置

本文介绍了如何使用patch文件在Sitecore 8中修改配置和自定义Pipeline。通过创建patch文件,可以动态地在运行时调整Sitecore的设置。文章详细阐述了创建和应用patch文件的过程,包括如何设置常量、修改内置Pipeline,以及如何解决可能出现的问题。
摘要由CSDN通过智能技术生成
写在前面:

转载请注明出处

  • 什么是patch文件? patch文件是一个扩展名为.config的文件,
    可以用来在runtime的时候修改Sitecore的配置。文件名称可以为任意,通常放在/App_Config/Include文件夹下,也可以放在更深层下属文件夹下 (譬如/App_Config/Include/CustomSetting/)。

  • patch文件作用原理? Sitecore会读取Sitecore.config文件来对Sitecore在runtime时进行配置。多个patch文件会按一定顺序合并到Sitecore.config文件中,然后合并在一起继而在Sitecore的runtime时起作用。

  • patch文件加入Sitecore.config的顺序?

    1. patch文件加入顺序类似CSS编译的顺序,即当存在相同配置时, 位置靠后的patch文件里的配置会覆盖位置靠前的patch文件里的配置。
    2. patch文件先加入/Include根目录下配置文件, 再加入其目录下文件夹中的配置文件
正文目录:
  1. 创建一个最简单的patch文件, 设定一些常量, 在代码中使用它, 并查看效果
  2. 创建一个较为复杂的patch文件, 使其对Sitecore固有的Pipleline进行修改

正文:

  1. 具体步骤:
    1). 在Visual Studio的Sitecore项目中, 在App_Config/Include文件夹下, 添加一个新配置文件, 取名为CustomSitecoreSettings.config.
    在这里插入图片描述
    2). 在CustomSitecoreSetting.config里加入如下代码 (这里使用主页的Sitecore路径作为一个例子, 如果是个多网站的Sitecore实例有时会用到特定主页路径):

    <?xml version=1.0>
    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    	<sitecore>
    		<settings>
    			<!--<setting name="{变量名称}" value="{变量值}"/>-->
    			<setting name="Sitecore Home Path" value="/sitecore/content/Home"/>
    		</settings>
    	</sitecore>
    </configuration>
    

    3). 在需要使用Sitecore主页路径的地方使用如下代码:

    //获取个性化配置的变量
    string homeItemPath = Sitecore.Configuration.Settings.GetSetting("Sitecore Home Path");
    

    4). 保存, 编译并发布这个project到安装的Sitecore的路径下

    5). 访问使用这个变量的页面测试是否成功
    在这里插入图片描述

  2. 想对Sitecore自有的Pipeline进行自定义, 首先要了解想改变的Pipeline处于Sitecore整体过程的哪一步, 然后在对特定的一部进行改变 (补充阅读: Sitecore Pipeline备忘录).

    例如 (以下代码也根据此情景为例), 当Sitecore找不到相应的Item时, 我们可以给它提供一个我们想要指定的Item给Sitecore, 这时我们就需要对Sitecore 自有的ItemResolver进行自定义, 并且应该在Sitecore执行完自己的ItemResolver后, 再对其进行自定义, 所以应该使用patch:after。

    基本格式为:

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    	<sitecore>
    		<pipelines>
    			<{目标pipeline处于的阶段名称}>
    				<processor patch:after(或before)="processer[@type='{Sitecore自有Pipeline的包括namespace的Class名字},{包含这个Class的assemly的名称}']" type="{自定义的包括namespace的Class的名称, 包括这个Class的assembly的名称},{}"/>
    			</{目标pipeline处于的阶段名称}>
    		</pipelines>
    	</sitecore>
    

    1). 首先在Visual Studio的Sitecore项目中, 在App_Config/Include文件夹下, 添加一个新文件夹, 取名为zzz.CustomPipelines, 在此文件夹中添加一个新的config文件, 取名为xCustomItemResolver.config。使用靠后的字母作为开头是为了让此patch文件尽量在后面加入Sitecore.config, 若之前有相同的patch文件,可以确保覆盖之前的配置从而使用当前配置。
    新建patch文件位置

    2). 在该文件中写入如下代码:

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    	<sitecore>
    		<pipelines>
    			<httpRequestBegin>
    				<processor patch:after="processor[@type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']" type="Sitecore8Review.Business.CustomPipelines.CustomItemResolver, Sitecore8Review.Business"/>      
    			</httpRequestBegin>
    		</pipelines>
    	</sitecore>		
    </configuration>
    

    其中, httpRequestBegin是Sitecore自身ItemResolver发生的pipeline名称, Sitecore8Review.Business是业务逻辑Project的名称, 即编译后的业务逻辑的assembly名称. itecore8Review.Business.CustomPipelines.CustomItemResolver是namespace的名称加Class的名称。

    3). 在业务逻辑层新建一个文件夹取名为CustomPipelines, 并在该文件夹中新建一个Class取名为CustomItemResolver.cs
    新建自定义ItemResolver
    4). 我们将要在Sitecore获得当前Item之后加入一项功能, 即若Sitecore未能找到当前Item (Sitecore.Context.Item为null时), 我们给予Sitecore我们的主页Item. 意思就是当用户访问不存在的页面时, 我们都将用户返回主页 (也可以是任意其他页面, 自定义的404页面应该是最佳实践). 在刚刚创建的CustomItemResolver.cs里写入如下代码来实现:

    public class CustomItemResolver: HttpRequestProcessor
    {
        private string homeItemPath = Sitecore.Configuration.Settings.GetSetting("Sitecore Home Path");
        public override void Process(HttpRequestArgs args)
        {
        	//检验当前Item是不是null
        	//如果不是null, 就什么都不做, 像平常进行即可
        	//如果是null, 就给Sitecore当前情景提供一个已知存在的Item
            if(Sitecore.Context.Item == null)
            {
            	//检验当前数据库是否为null, 因为当Sitecore的Item Resolver Pipeline通过以后,若当前情景Item仍然为null, 则数据库也为null, 例如showconfigs.aspx, 此时无法调用GetItem()
    			if(Sitecore.Context.Database!=null)
    			{
    				//为Sitecore当前情景提供一个已知存在的Item, 这里是Home这个Item
    				//当然也可以做一些其他的事情
    			    Sitecore.Context.Item = Sitecore.Context.Database.GetItem(homeItemPath);
    			}             
            }
        }
    }
    

    5). 保存, 编译并发布这个project到安装的Sitecore的路径下
    6). 访问任意不存在页面来验证自定义的Pipeline是否成功, 图为一个随机url也显示主页:
    在这里插入图片描述
    7). Troubleshoot: 若不能运行, 访问https://[Sitecore实例名称]/sitecore/admin/showconfig.aspx, 登入, 找到httpRequestBegin, 确保xCustomItemResolver在ItemResolver之后且在下一个Pipeline (这里是DeviceSimulatorResolver)之前。
    ConfigChecking
    如果没有在指定位置, 而是在httpRequestBegin Pipeline的最后,并且包含patch:after,如图:
    在这里插入图片描述
    查看patch文件中的xmlconfig后是否有斜杠(/), 这个斜杠很重要,不能省略。

以上就是如何使用patch文件进行Sitecore自定义配置和自定义Pipeline的简单流程。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值