1

プロジェクト全体を通して、リンク (外部または内部またはメディア) に Sitecore の一般リンク フィールドをよく使用します。私が持っている 1 つの基準は、すべてのページに「NavigationTitle」というフィールドがすべてのページにあるということです。これにより、CMS 作成者は、アイテムがリンクされているときはいつでも、アイテムのテキストの表示を制御できます。理想的には、そのアイテムがリンクされているときはいつでも、システムがターゲットアイテムからそのフィールドを使用する方法を見つけることができるようにしたいと考えています. ここに例があります。

私のサイトのすべてのページに次の基本的なフィールドがあるとしましょう

  • NavigationTitle (テキスト)
  • コンテンツ (リッチ テキスト)

Promo というデータ テンプレートがあるとします。Promo には次のフィールドがあります。

  • タイトル(本文)
  • 内容(テキスト)
  • イメージ(イメージ)
  • リンク(総合リンク)

プロモーションのリンク フィールドは、内部ページまたは外部ページにリンクできます。現在、プロモを表示するサブレイアウトを作成するときに、<sc:Link>タグを使用してリンク フィールドを出力すると、Sitecore は最初にリンク フィールドのテキストをテキストとして使用すると思います。それ以外の場合は、テキストにアイテム名を使用すると思います。

ターゲット アイテムのアイテム名を使用する代わりに、ターゲット アイテムの特定のフィールド値を使用したいと考えています。そして、Glass Mapper などと連携して機能するように、このコードを十分に低いレベルで実行したいと考えています。そのため、Glass Mapper を使用して Link フィールドを (Editable メソッドなどを使用して) 出力すると、正しいリンク テキストが表示されます。

誰も私がこれを行う方法を知っていますか? 通常の General Link Field から継承し、何かをオーバーライドするカスタムの General Link Field を作成する必要があるかもしれないと推測しています。推測です。どんな助けでも大歓迎です。

4

2 に答える 2

3

間違いなく実行可能です。ステップの前に独自のパイプライン ステップを追加することをお勧めしますGetLinkFieldValue renderField。は、次のカスケードを行うクラスをGetLinkFieldValue使用しLinkRendererて、リンク テキストとして何を入れるかを決定します。

  1. 引数オブジェクトの RawParameters プロパティに設定された値 (値が 1 つの場合のみ)
  2. 引数オブジェクトの Parameters プロパティのテキスト パラメーター
  3. リンク欄の説明
  4. 項目名

テキスト パラメータの値を設定できます。

構成

<renderField>
        <processor type="MyLibrary.Pipelines.AddNavigationTitle, MyLibrary" patch:before="*[@type='Sitecore.Pipelines.RenderField.GetLinkFieldValue, Sitecore.Kernel']" />
</renderField>

コード

public class AddNavigationTitle
{
    public void Process(Sitecore.Pipelines.RenderField.RenderFieldArgs args)
    {
        if (args.FieldTypeKey == "general link")
        {
            Sitecore.Data.Fields.LinkField linkField = args.Item.Fields[args.FieldName];

            if (linkField != null && linkField.TargetItem != null)
            {
                var title = linkField.TargetItem["NavigationTitle"];

                if (!string.IsNullOrWhiteSpace(title))
                {
                    args.Parameters["text"] = title;
                }
            }
        }
    }
}

一般的なリンク フィールドをレンダリングするたびに、これが実行され、NavigationTitle フィールドからのテキストが追加されます。また、フィールドが入力されていない場合でも、優先順位リストが上から下にカスケードされるという追加の利点もあります。

于 2015-02-12T21:45:23.497 に答える