Umbracoの辞書項目のプレースホルダの置換


ウンブロdictionary feature それはあなたがボタンを持っているテキストを制御するエディタを可能にするので、本当にクールですあなたのウェブサイト上のフォームのラベルや他の場所で、単純な文章を変更するために開発者を含む必要性を削除する.
今日、私たちは、辞書項目で定義されたいくつかのテキストをもう少しダイナミックにする必要があるシナリオに入りました.辞書項目を完全にテキストテンプレートに置き換える代わりに、辞書項目の値を置換することを決めました.これは、エディタがまだ表示されるテキストの大部分をコントロールするのを許します.
簡単な修正は、あなたが持っているどんなテンプレートにおいても、特定の辞書項目によって返された文字列に何らかの種類の置換を行うことです.しかし、それは非常にスケーラブルではありません.したがって、私はさらにumbracohelperのGetDictionaryValue 二つの拡張メソッドを持つメソッド
public static string GetDictionaryValueWithReplacement(this UmbracoHelper umbraco, string key, string pattern, string replacement)
{
    return GetDictionaryValueWithReplacement(umbraco, key, string.Empty, pattern, replacement);
}

public static string GetDictionaryValueWithReplacement(this UmbracoHelper umbraco, string key, string altText, string pattern, string replacement)
{
    return Regex.Replace(umbraco.GetDictionaryValue(key, altText), pattern, replacement);
}
これは簡単にウェブサイト上の任意の機能を再利用する可能性を与えます.
今、キーを持つ辞書項目を与えられたSome.Dictionary.Item テキストThis message is super personal for you, %name%. Hope you like it. , 上記の拡張メソッドは、例えば次のようにテンプレートを使用できます.
@Umbraco.GetDictionaryValueWithReplacement("Some.Dictionary.Item", "%name%", Members.GetCurrentMember().Name)
どちらが表示されます(少なくともブラウザで)
This message is super personal for you, Morten Hartvig. Hope you like it.
一つはもちろん1つ以上のプレースホルダで動作するように追加の方法を作ることができます.次のようになります.
public static string GetDictionaryValueWithReplacement(this UmbracoHelper umbraco, string key, IDictionary<string, string> replacements)
{
    var value = umbraco.GetDictionaryValue(key);

    foreach (var replacement in replacements)
    {
        value = Regex.Replace(value, replacement.Key, replacement.Value);
    }

    return value;
}
... しかし、それは我々が必要とするものの範囲を越えています.