2016-11-23 5 views
1

私たちはsitecore 8.1 update 3とGlass Mapper 4.2.1.188にあります。GlassMapperレンダリングカスタムリンクフィールド

ノーマルリンクフィールドでは、熟練したエディタと通常モードで動作します。

コアデータベースに「一般リンク」フィールドを重複させ、「Javascript」メニュー項目を削除しました。それがカスタムのLinkフィールドに対して行った唯一の変更です。

これにより、エクスペリエンスエディタモードでフィールドが表示されなくなります。その正常モードでは正常です。

@RenderLink(x => x.CallToActionButton, new { @class = "c-btn c-btn--strong c-btn--large" }, isEditable: true) 

編集1:

私はサイトコアフィールドは、そのすべての良いをレンダラを使用します。

@Html.Sitecore().Field(FieldIds.HomeCallToActionButton, new { @class = "c-btn c-btn--strong c-btn--large" }) 

いずれかの提案があります。

答えて

2

問題の理由は、ExperienceEditorに表示されるコードを生成しているときにSitecoreがフィールドタイプキーをチェックするということです。

Sitecore.Pipelines.RenderField.GetLinkFieldValueクラスチェックフィールドタイプのキーを使用すると、そのフィールドの名前がCustom Linkまたはそのような何かであるオリジナルGeneral Linkフィールドをコピーしていた、linkまたはgeneral link、あなたが書いたものからのどちらかである場合。つまり、フィールドタイプのキーは、ケースではcustom link(フィールドタイプ名は小文字)です。 SkipProcessorメソッドはcustom linkとフィールドタイプキーを比較します。異なるため、プロセッサはフィールドを無視します。

フィールドの名前をGeneral Linkに変更し、Field Types/Customフォルダの下に置くことはできません。原因:SitecoreはフィールドタイプのIDを保持しません(フィールドタイプキーを代わりに格納します)。

using Sitecore.Pipelines.RenderField; 

namespace My.Assembly.Namespace 
{ 
    public class GetLinkFieldValue : Sitecore.Pipelines.RenderField.GetLinkFieldValue 
    { 
     /// <summary> 
     /// Checks if the field should not be handled by the processor. 
     /// </summary> 
     /// <param name="args">The arguments.</param> 
     /// <returns>true if the field should not be handled by the processor; otherwise false</returns> 
     protected override bool SkipProcessor(RenderFieldArgs args) 
     { 
      if (args == null) 
       return true; 
      string fieldTypeKey = args.FieldTypeKey; 
      if (fieldTypeKey == "custom link") 
       return false; 
      return base.SkipProcessor(args); 
     } 
    } 
} 

と元のクラスの代わりにそれを登録します:あなたは何ができるか

Sitecore.Pipelines.RenderField.GetLinkFieldValueクラスをオーバーライドし、そのようなその方法の一つである

<sitecore> 
    <pipelines> 
    <renderField> 
     <processor type="Sitecore.Pipelines.RenderField.GetLinkFieldValue, Sitecore.Kernel"> 
      <patch:attribute name="type">My.Assembly.Namespace.GetLinkFieldValue, My.Assembly</patch:attribute> 
     </processor> 
    </renderField> 
    </pipelines> 
</sitecore> 
+0

マレク・Musieklakサイトコアがレンダリングされます@フィールド右。私がSitecoreフィールドヘルパーを使用するとき。それは経験エディタですべて役に立ちます。 GlassMapperでのみ発生しますか? –

+0

また、FieldTypeKeyとは何ですか? –

+0

フィールドタイプKey =フィールドタイプ名前を小文字にします。あなたは私が上に書いたことを試しましたか? –