publish:end 事件的事件处理程序刚刚命中第一个选定的语言。任何的想法?
Event Handler for publish:end event is just hitting the first selected language. Any idea?
我为 publish:end 事件创建了一个事件处理程序,以便在每次 Sitecore 完成时为我的 Sitecore 实例中可用的每种语言创建站点地图 XML 文件发布网站。
如Get Languages chosen for publish in publish:end event所述:
[...] actually the publish:end event hits once for every language - and you get get the language that is being published by doing EventArgs[0].Options.Language.
问题是 publish:end 事件只针对第一个 selected 语言触发了我的事件处理程序一次。例如,如果我在发布我的 Sitecore 实例期间 select 3 种语言(En-US、Pt-BR、Fr-CA),publish:end 事件将命中我的事件处理程序一次,并将 En-US 显示为 属性 EventArgs[0].Options.Language
的值。它不会影响我的其他 2 种 selected 语言(Pt-BR、Fr-CA)的事件处理程序。
我正在使用 Sitecore.NET 8.0(修订版 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 Languages Configured
这里是显示可用语言的 Sitecore 发布站点对话框:
Publish Site Dialog
无论为项目发布选择多少种语言,每个发布过程只调用一次 publish:end 处理程序。自 Sitecore 7.2 以来,这已作为发布改进的一部分进行了更改。
您可能想看看 publish:complete 处理程序。
我为 publish:end 事件创建了一个事件处理程序,以便在每次 Sitecore 完成时为我的 Sitecore 实例中可用的每种语言创建站点地图 XML 文件发布网站。
如Get Languages chosen for publish in publish:end event所述:
[...] actually the publish:end event hits once for every language - and you get get the language that is being published by doing EventArgs[0].Options.Language.
问题是 publish:end 事件只针对第一个 selected 语言触发了我的事件处理程序一次。例如,如果我在发布我的 Sitecore 实例期间 select 3 种语言(En-US、Pt-BR、Fr-CA),publish:end 事件将命中我的事件处理程序一次,并将 En-US 显示为 属性 EventArgs[0].Options.Language
的值。它不会影响我的其他 2 种 selected 语言(Pt-BR、Fr-CA)的事件处理程序。
我正在使用 Sitecore.NET 8.0(修订版 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 Languages Configured
这里是显示可用语言的 Sitecore 发布站点对话框:
Publish Site Dialog
无论为项目发布选择多少种语言,每个发布过程只调用一次 publish:end 处理程序。自 Sitecore 7.2 以来,这已作为发布改进的一部分进行了更改。
您可能想看看 publish:complete 处理程序。