我为 publish:end 事件创建了一个事件处理程序,以便每次Sitecore完成发布网站时,为我的Sitecore实例中的每种语言创建一个Sitemap XML文件。
如Get Languages chosen for publish in publish:end event中所述:
[...]实际上,每个语言的发布:结束事件都会命中一次 - 您可以通过执行EventArgs [0]获取正在发布的语言.Options.Language。
问题是发布:结束事件只是命中我的事件处理程序一次,而只是第一个选定的语言。如果我在发布Sitecore实例期间选择了3种语言(En-US,Pt-BR,Fr-CA),例如, publish:end 事件将只触及我的事件处理程序一次并显示 En-US 作为Property EventArgs[0].Options.Language
的值。对于其他2种选定语言(Pt-BR,Fr-CA),它没有命中我的事件处理程序。
我正在使用 Sitecore.NET 8.0(rev.150812)。
以下是我的事件处理程序配置文件:
<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<events>
<event name="publish:end">
<handler type="Project1.EventHandlers.BuildXMLSitemap, Project1.SBL" method="BuildSitemap" />
</event>
<event name="publish:end:remote">
<handler type="Project1.EventHandlers.BuildXMLSitemap, Project1.SBL" method="BuildSitemap" />
</event>
</events>
<!-- Update settings for the Trusted_Connection = True -->
<sites>
<site name="website">
<patch:attribute name="sitemapXmlFileName">sitemap</patch:attribute>
<patch:attribute name="sitemapXmlIndexFileName">sitemapindex</patch:attribute>
</site>
</sites>
</sitecore>
</configuration>
以下是我的代码:
namespace Project1.EventHandlers
{
public class BuildXMLSitemap
{
public void BuildSitemap(object sender, EventArgs args)
{
Language language = GetLanguage(args);
}
private Language GetLanguage(EventArgs args)
{
Language language;
if (args is PublishEndRemoteEventArgs)
{
var publishArgs = args as PublishEndRemoteEventArgs;
language = LanguageManager.GetLanguage(publishArgs.LanguageName);
}
else
{
var publisher = Event.ExtractParameter(args, 0) as Publisher;
if (publisher == null) return null;
language = publisher.Options.Language;
}
return language;
}
}
}
这是我配置语言的Sitecore实例:
这里是Sitecore Publish Site对话框,显示可用的语言:
答案 0 :(得分:5)
每个发布过程只调用一次:publish:end处理程序,无论为项目发布选择了多少种语言。自Sitecore 7.2以来,这已经发生了变化,这是发布改进的一部分。
您可能希望查看publish:complete处理程序。