Sitecore补丁 - 添加网站

5

我正在尝试将站点名称添加到站点列表中,以便在publish:end:remote事件上清除HTML缓存。

<event name="publish:end:remote">
  <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache">
    <sites hint="list">
      <site patch:after="*[@site]">mysite</site>
    </sites>
  </handler>
  <handler type="Sitecore.Publishing.RenderingParametersCacheClearer, Sitecore.Kernel" method="ClearCache"/>
</event>

然而它并没有像预期的那样工作。我进行了谷歌搜索,没有找到有关如何在元素之前或之后修补的任何信息。大多数示例都是关于/在属性之前等方面的。

谢谢。

4个回答

9

如果你想修补一个没有属性的节点,你可以选择节点的text()来进行比较。在之前或之后。请参考以下示例:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <events timingLevel="custom">
      <event name="publish:end:remote">
        <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache">
          <sites>
            <site patch:before="site[./text()='website']">plop3</site>
          </sites>
        </handler>
      </event>
    </events>
  </sitecore>
</configuration>

针对您的问题有一种不同的做法。 使用补丁删除,您可以清空列表并从头开始构建您的列表。

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <events timingLevel="custom">
      <event name="publish:end:remote">
        <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache">
          <sites hint="list">
            <patch:delete />
          </sites>
          <sites hint="list">
            <site>website</site>
            <site>anotherwebsite</site>
          </sites>
        </handler>
      </event>
      </events>
  </sitecore>
</configuration>

在Sitecore 8.1的App_Config\Include\Sitecore.ExperienceExplorer.config文件中的第162行,您可以找到使用./text()的高级示例。 - Jan Bluemink
2
完美,正是我想要的。谢谢。 - Nil Pun

5
您无需使用任何patch:deletepatch:instead。您只需要在新的<site>标签中添加name属性,这样Sitecore就会将它们视为单独的站点定义。
以下是进一步的说明:外部配置文件的配置补丁系统 创建App_config\Include\My.Site.Definition.config文件,并添加以下内容:
<sitecore>
  <sites>
    <site name="mysite" patch:before="site[@name='website']"
        ... />
  </sites>
  <events>
    <event name="publish:end">
      <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache">
        <sites hint="list">
          <site name="mysite">mysite</site>
        </sites>
      </handler>
    </event>
    <event name="publish:end:remote">
      <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache">
        <sites hint="list">
          <site name="mysite">mysite</site>
        </sites>
      </handler>
    </event>
  </events>
</sitecore>

另一个选择是使用其他标签代替<site>标签,因为当父标签包含hint="list"属性时,它会将所有子标签视为该列表的项目。您需要确保每个标签都是唯一的。您可以这样使用它:
<event name="publish:end:remote">
  <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache">
    <sites hint="list">
      <site1>mysite</site1>
      <othersite>othersite</othersite>
    </sites>
  </handler>
</event>

1
正确的做法是添加一个唯一的标签,而清除缓存的顺序并不重要。 - jammykam

0

您不需要修补网站列表,而是需要逐个添加所有网站。

    <event name="publish:end:remote">
        <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache">
            <sites hint="list">
                <site>SiteOne</site>
                <site>Sitetwo</site>
                     ...
                <site>SiteN</site>
            </sites>
        </handler>
    </event>

但我们不想在我们的解决方案中存储任何Sitecore配置。 是否有方法可以保留网站并添加更多站点? - Nil Pun
你是什么意思:“我们不想在解决方案中存储Sitecore配置”?通常,您的解决方案中有一个app_config文件夹,该文件夹会被复制到目标文件夹中,但这取决于解决方案。 - Vlad Iobagiu
1
我的意思是我们应该只修补 Sitecore 配置文件,这样升级会更容易。 - Nil Pun
+1 @myagdi 最好将标准配置保持原样,并使用补丁来进行更改。毫不夸张地说,这使得升级变得轻而易举,字面上的意思是十分容易。 - Richard Hauer

0

这个问题已经有答案了,但是补充一下上面的答案——在修补网站时,您不需要添加其他元素属性,只需要添加您要修补的属性。

<sitecore>
<events>
  <!-- Html Cache clear on publish events -->
  <!-- Force FULL cache clear on publish-->
  <event name="publish:end">
    <handler>
      <sites>
        <site name="customSite">customSite</site>
      </sites>
    </handler>
  </event>
  <!-- Html Cache clear on publish events -->
  <!-- Force FULL cache clear on publish-->
  <event name="publish:end:remote">
    <handler>
      <sites>
        <site name="customSite">customSite</site>
      </sites>
    </handler>
  </event>
</events>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接