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

4 回答 4

8

如果要修补没有属性的节点,可以选择要比较的节点的 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>
于 2015-11-20T08:32:32.883 回答
5

您不需要使用任何patch:deletepatch:instead. 您只需将name属性添加到新<site>标签,以便 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>
于 2015-11-20T08:48:19.447 回答
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>
于 2015-11-20T05:52:54.920 回答
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>

于 2019-11-16T01:54:28.507 回答