6

Sitecore で、マスター データベース (未公開) に新しいアイテムを追加すると、公開状態に関する表示が何も表示されません。

たとえば、ユーザーが 10 個のアイテムを追加した場合、ユーザーは自分が追加した公開待ちのアイテムを把握するのに混乱する可能性があります。

新しく追加されたアイテムを未公開または新規として識別し、「クイック アクション バー」に検証を表示する方法はありますか?

4

2 に答える 2

18

これについて考えたことはありませんでしたが、実際には修正するのは非常に簡単です。

GutterRendererアイテムが 1 つ以上の公開ターゲットに公開されているか、すべての公開ターゲットに公開されているか、またはどの公開ターゲットにも公開されていないかを示すを作成しました。

編集:クリック動作を追加しました。ガター アイコンをクリックすると、そのアイテムの公開ダイアログが表示されます。

まず、このために私が書いたコードを示し、次にセットアップと結果のスクリーンショットを示します。

コードは次のとおりです。

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)
      };
    }
  }
}

そして、これはどのように設定し、実行するとどのように見えるかです:

Core図 1:データベース に新しい Gutter アイテムを作成します。ここに画像の説明を入力

図 2: データベースに戻りMaster、ガター領域を右クリックしてガターをアクティブにします。 ここに画像の説明を入力

図 3: ガターにアイテムの公開ステータスが表示されるようになりました ここに画像の説明を入力

于 2013-03-02T10:46:29.510 に答える