如何将新项目标记为未发布的项目?

时间:2013-03-02 08:17:30

标签: sitecore

在sitecore中,如果我将新项目添加到主数据库(未发布),则不会显示有关已发布状态的任何指示。

举个例子,如果一个用户添加了10个项目,他可能会混淆他自己添加的待发布项目。

有没有办法将新添加的项目标识为未发布或新建,并在“快速操作栏”中显示验证?

2 个答案:

答案 0 :(得分:18)

从未想过这一点,但实际上很容易解决。

我创建了一个GutterRenderer,表示项目已发布到至少一个,所有或任何发布目标。

编辑:添加了点击行为。单击装订线图标时,将显示该项目的“发布”对话框。

首先,我将向您展示我为此编写的代码,然后我将向您展示设置和结果的屏幕截图。

以下是代码:

using System.Collections.Generic;
using System.Linq;
using Sitecore;
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Globalization;
using Sitecore.Shell.Applications.ContentEditor.Gutters;

namespace ParTech.Library.Gutters
{
  public class PublicationStatus : GutterRenderer
  {
    private readonly ID publishingTargetsFolderId = new ID("{D9E44555-02A6-407A-B4FC-96B9026CAADD}");
    private readonly ID targetDatabaseFieldId = new ID("{39ECFD90-55D2-49D8-B513-99D15573DE41}");

    protected override GutterIconDescriptor GetIconDescriptor(Item item)
    {
      bool existsInAll = true;
      bool existsInOne = false;

      // Find the publishing targets item folder
      Item publishingTargetsFolder = Context.ContentDatabase.GetItem(publishingTargetsFolderId);

      if (publishingTargetsFolder == null)
      {
        return null;
      }

      // Retrieve the publishing targets database names
      List<string> publishingTargetsDatabases = publishingTargetsFolder.GetChildren()
        .Select(x => x[targetDatabaseFieldId])
        .ToList();

      // Check for item existance in publishing targets
      publishingTargetsDatabases.ForEach(delegate(string databaseName)
      {
        if (Database.GetDatabase(databaseName).GetItem(item.ID) != null)
        {
          existsInOne = true;
        }
        else
        {
          existsInAll = false;
        }
      });

      // Return descriptor with tooltip and icon
      string tooltip = Translate.Text("This item has not yet been published");
      string icon = "People/16x16/flag_red.png";

      if (existsInAll)
      {
        tooltip = Translate.Text("This item has been published to all targets");
        icon = "People/16x16/flag_green.png";
      }
      else if (existsInOne)
      {
        tooltip = Translate.Text("This item has been published to at least one target");
        icon = "People/16x16/flag_yellow.png";
      }

      return new GutterIconDescriptor()
      {
        Icon = icon,
        Tooltip = tooltip,
        Click = string.Format("item:publish(id={0})", item.ID)
      };
    }
  }
}

这就是这样设置的方式以及它在运行后的外观:

图1:在Core数据库中创建一个新的Gutter项: enter image description here

图2:切换回Master数据库并右键单击装订线区域激活装订线。 enter image description here

图3:装订线现在指示物品的发布状态 enter image description here

答案 1 :(得分:3)

从我的头顶开始,它不是开箱即用的。然而,在核心数据库中,有阴沟的定义等。您可以创建自己的。

虽然项目上有“已发布”字段,但我不确定是否考虑了不同的版本。 也许您可以检查主和Web中的项目之间的差异(即项目不存在或在Web中是不同的版本,然后它等待发布)。

或者,请仔细阅读:http://webcmd.wordpress.com/2011/08/31/sitecore-ribbon-that-displays-published-state-of-an-item/ 它将解释如何检查项目是否作为功能区发布。