[英]Sitecore 6.5 Republish Overwritten Media Items Set to Auto-Publish
我們正在使用Sitecore 6.5,並且使用此指南將我們的網站設置為自動發布媒體項目。 所有媒體項目都使用自定義工作流程,該工作流程默認設置為“發布”狀態,這是最后的工作流程步驟,並且設置為“自動發布”。 它的效果很好,並且確實減輕了我們的Web編輯器的困惑。
問題是:如果編輯者覆蓋了媒體項目(例如過時的pdf),則新項目不會自動發布。 網絡編輯者必須記住要發布覆蓋的項目。 我們有500多位經驗豐富程度不同的編輯,所以這個問題經常出現。 有人知道解決方案嗎?
如果自動發布通過計划任務或代理人的整個媒體庫是假表,你可以考慮掛鈎到Sitecore的item:saved
事件(更多有關事件的信息在這里 )。
觸發此事件時,可以使用item.Paths.IsMediaItem
確定要保存的項目是否是Media Item,如果是, item.Paths.IsMediaItem
編程方式發布該項目(或)以觸發所需的工作流狀態。
這是我根據Derek的回答得出的,但是由於我是Sitecore開發的新手,我有這個權利嗎?
將處理事件添加到web.config
<event name="item:saved">
<handler type="SomeNamespace.MediaOverwritePublisher, SomeAssembly" method="OnItemSaved" />
</event>
然后在我們的自定義文件夾中的程序集中,我將添加:
namespace SomeNamespace
{
public class MediaOverwritePublisher
{
public void OnItemSaved(Object sender, EventArgs args)
{
var item = Event.ExtractParameter(args, 0) as Item;
using (new SecurityDisabler())
{
if (item != null)
{
if (item.Paths.IsMediaItem)
{
var source = Factory.GetDatabase("master");;
var target = Factory.GetDatabase("web");;
var options = new PublishOptions(source, target, PublishMode.SingleItem, item.Language, DateTime.Now)
{
RootItem = item,
Deep = true,
};
var publisher = new Publisher(options);
publisher.PublishAsync();
}
}
}
}
}
}
這是我根據德里克的答案提出的
我建議您使用Derek的第二建議選項來觸發工作流程。 由於已經設置了工作流程,因此只需要將項目置於具有自動發布操作的狀態即可。
這應該使您入門: Sitecore:以編程方式將工作流程分配給項目
如果您仍要發布,那么我建議您從sitecore獲取目標數據庫,以防萬一您有更多的“網絡”資源或名稱被重命名。
Item itemNotNull = Client.GetItemNotNull("/sitecore/system/publishing targets");
ArrayList arrayList = new ArrayList();
ChildList children = itemNotNull.Children;
foreach (Item item in children)
{
string name = item["Target database"];
Database database = Factory.GetDatabase(name, false);
if (database != null)
…
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.