GlassMapper 渲染自定义 Link 字段
GlassMapper Render Custom Link Field
我们正在使用 sitecore 8.1 update 3 和 Glass Mapper 4.2.1.188
对于普通 Link 字段,它在有经验的编辑器和普通模式下工作正常。
我们在核心数据库中复制了常规 Link 字段并删除了 "Javascript" 菜单项。这是我们对自定义 Link 字段所做的唯一更改。
这使得字段在体验编辑器模式下消失。在正常模式下没问题。
@RenderLink(x => x.CallToActionButton, new { @class = "c-btn c-btn--strong c-btn--large" }, isEditable: true)
编辑 1:
当我使用 Sitecore Field 渲染器时一切正常。
@Html.Sitecore().Field(FieldIds.HomeCallToActionButton, new { @class = "c-btn c-btn--strong c-btn--large" })
如有任何建议,我们将不胜感激。
出现问题的原因是 Sitecore 在生成显示在体验编辑器中的代码时会检查字段类型键。
Sitecore.Pipelines.RenderField.GetLinkFieldValue
class 检查字段类型键是 link
还是 general link
并且根据您所写的内容,您复制了原始 General Link
字段所以你的字段名称是 Custom Link
或类似的名称。这意味着在您的情况下字段类型键是 custom link
(字段类型名称小写)。 SkipProcessor
方法将 custom link
与字段类型键进行比较,因为它不同,处理器会忽略您的字段。
您不能简单地将字段重命名为 General Link
并将其放在 Field Types/Custom
文件夹下,因为 Sitecore 不会保留字段类型的 ID(而是存储字段类型键)。
你可以做的是覆盖 Sitecore.Pipelines.RenderField.GetLinkFieldValue
class 和它的方法之一:
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);
}
}
}
并注册它而不是原来的class:
<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>
我们正在使用 sitecore 8.1 update 3 和 Glass Mapper 4.2.1.188
对于普通 Link 字段,它在有经验的编辑器和普通模式下工作正常。
我们在核心数据库中复制了常规 Link 字段并删除了 "Javascript" 菜单项。这是我们对自定义 Link 字段所做的唯一更改。
这使得字段在体验编辑器模式下消失。在正常模式下没问题。
@RenderLink(x => x.CallToActionButton, new { @class = "c-btn c-btn--strong c-btn--large" }, isEditable: true)
编辑 1:
当我使用 Sitecore Field 渲染器时一切正常。
@Html.Sitecore().Field(FieldIds.HomeCallToActionButton, new { @class = "c-btn c-btn--strong c-btn--large" })
如有任何建议,我们将不胜感激。
出现问题的原因是 Sitecore 在生成显示在体验编辑器中的代码时会检查字段类型键。
Sitecore.Pipelines.RenderField.GetLinkFieldValue
class 检查字段类型键是 link
还是 general link
并且根据您所写的内容,您复制了原始 General Link
字段所以你的字段名称是 Custom Link
或类似的名称。这意味着在您的情况下字段类型键是 custom link
(字段类型名称小写)。 SkipProcessor
方法将 custom link
与字段类型键进行比较,因为它不同,处理器会忽略您的字段。
您不能简单地将字段重命名为 General Link
并将其放在 Field Types/Custom
文件夹下,因为 Sitecore 不会保留字段类型的 ID(而是存储字段类型键)。
你可以做的是覆盖 Sitecore.Pipelines.RenderField.GetLinkFieldValue
class 和它的方法之一:
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);
}
}
}
并注册它而不是原来的class:
<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>