簡體   English   中英

Sitecore 6.5重新發布設置為自動發布的覆蓋媒體項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM