【问题标题】:Sitecore 6.5 Republish Overwritten Media Items Set to Auto-PublishSitecore 6.5 重新发布覆盖的媒体项目设置为自动发布
【发布时间】:2015-01-24 02:31:08
【问题描述】:

我们使用的是 Sitecore 6.5,并且我们的网站设置为使用 this guide 自动发布媒体项目。所有媒体项目都使用自定义工作流程,该工作流程默认设置为发布状态,这是工作流程的最后一步,并设置为自动发布。它工作得很好,它确实减少了我们网络编辑器的困惑。

问题:如果编辑器覆盖了媒体项目(比如过时的 pdf),则新项目不会自动发布。网络编辑必须记住发布被覆盖的项目。我们有超过 500 名不同程度的编辑,所以这个问题经常出现。有谁知道这个的解决方案吗?

【问题讨论】:

    标签: sitecore sitecore6 sitecore-media-library sitecore-workflow


    【解决方案1】:

    如果无法通过计划任务或代理自动发布整个媒体库,您可以考虑挂钩 Sitecore 的 item:saved 事件(有关事件 here 的更多信息)。

    当此事件触发时,您可以使用item.Paths.IsMediaItem 确定要保存的项目是否是媒体项目,如果是,则以编程方式发布项目(或)触发所需的工作流状态。

    【讨论】:

    • 谢谢,德里克。这为我指明了正确的方向。我有一个可能的答案,但尚未测试。
    【解决方案2】:

    这是我根据 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();
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      这是我根据 Derek 的回答得出的结论

      我建议您使用 Derek 的第二个建议选项来触发工作流程。 由于您已经设置了工作流程,因此您只需要将项目置于具有自动发布操作的状态。

      这应该可以帮助您入门: Sitecore: Assign workflow to an item programmatically

      如果您仍想发布,那么我建议您从 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)
           …
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-14
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 1970-01-01
        • 2012-08-25
        相关资源
        最近更新 更多