2

Sitecore のコンテンツ アイテムを右クリックし、コンテキスト メニューで [Run My App] などを選択できるようにしたいと考えています。次に、実行中のアプリで、右クリックされたコンテンツ アイテムを参照できるようにする必要があります。これは可能ですか?

4

1 に答える 1

2

はい、これを行うことができます。思ったほど難しくはありません。

Core データベースにドロップして、コンテンツ エディターを開きます。右クリック メニューは、sitecore/content/Applications/Content Editor/Context Menus/Default内で定義されています。

そのフォルダ内のアイテムは、ツリー内のアイテムを右クリックしたときに表示されるものです。したがって、 Menu Itemのテンプレートを使用して新しい項目を追加できます。

既存のものを見ると、そのほとんどが Sitecore デスクトップにメッセージを送信しています。これらのメッセージは、/App_Config/Commands.config で定義されたコマンドです。別の Sitecore アプリケーションを起動するだけのものは見当たらないので、それを行うには新しいコマンドを作成する必要があります。Sitecore.Shell.Framework.Commands.Command作成するには、クラスから継承するだけです。CommandContextこれは、アイテムのコレクションを保持する を渡します。

    public class DemoCommand: Command
{
    #region Overrides of Command

    /// <summary>
    /// Executes the command in the specified context.
    /// </summary>
    /// <param name="context">The context.</param>
    public override void Execute(CommandContext context)
    {
        Assert.ArgumentNotNull(context, "context");

        var parameters = new NameValueCollection();
        if (context.Items != null && context.Items.Length == 1)
        {
            var item = context.Items[0];
            parameters["id"] = item.ID.ToString();
        }
        Context.ClientPage.Start(this, "Run", parameters);
    }

    #endregion

    public CommandState QueryStat(CommandContext context)
    {
        Assert.ArgumentNotNull(context, "context");
        return CommandState.Enabled;
    }

    protected static void Run(ClientPipelineArgs args)
    {
        Assert.ArgumentNotNull(args, "args");

        SheerResponse.CheckModified(false);
        SheerResponse.Broadcast(
                        SheerResponse.ShowModalDialog(
                            "[Path to your application here]"
                        ),
                        "Shell");
    }
}

メッセージ呼び出しで渡されたアイテムを取得するには、変数 $Target を渡すだけです。

したがって、メニュー項目のメッセージフィールドは次のようになります。

item:runMyApplication(id=$Target)

それが理にかなっていることを願っています:)

于 2013-06-04T21:01:45.113 に答える