1

当用户使用 RTE 上的“插入链接”功能创建故事时,我们会得到类似...
<a href="link-to-story"><Item-Name-Of-Story</a>

我不想使用项目名称,而是使用另一个名为“标题”的字段
有人知道该怎么做吗?...

<a href="link-to-story">Headline-Of-Story</a>

任何帮助都感激不尽。谢谢

4

2 回答 2

2

首先,您需要使用 Reflector 或 DotPeek 查看此类:Sitecore.Shell.Controls.RichTextEditor.InsertLink.InsertLinkForm 并使用您自己的类对其进行修改。你只需要修改这个方法,我测试过并且工作正常:

   protected override void OnOK(object sender, EventArgs args)
{
  Assert.ArgumentNotNull(sender, "sender");
  Assert.ArgumentNotNull((object) args, "args");
  string displayName;
  string text;
  if (this.Tabs.Active == 0 || this.Tabs.Active == 2)
  {
    Item selectionItem = this.InternalLinkTreeview.GetSelectionItem();
    if (selectionItem == null)
    {
      SheerResponse.Alert("Select an item.", new string[0]);
      return;
    }
    else
    {
      displayName = selectionItem["Headline"];
      if (selectionItem.Paths.IsMediaItem)
        text = CustomInsertLinkForm.GetMediaUrl(selectionItem);
      else if (!selectionItem.Paths.IsContentItem)
      {
        SheerResponse.Alert("Select either a content item or a media item.", new string[0]);
        return;
      }
      else
      {
        LinkUrlOptions options = new LinkUrlOptions();
        text = LinkManager.GetDynamicUrl(selectionItem, options);

      }
    }
  }
  else
  {
    MediaItem mediaItem = (MediaItem) this.MediaTreeview.GetSelectionItem();
    if (mediaItem == null)
    {
      SheerResponse.Alert("Select a media item.", new string[0]);
      return;
    }
    else
    {
      displayName = mediaItem.DisplayName;
      text = CustomInsertLinkForm.GetMediaUrl((Item) mediaItem);
    }
  }
  if (this.Mode == "webedit")
  {
    SheerResponse.SetDialogValue(StringUtil.EscapeJavascriptString(text));
    base.OnOK(sender, args);
  }
  else
    SheerResponse.Eval("scClose(" + StringUtil.EscapeJavascriptString(text) + "," + StringUtil.EscapeJavascriptString(displayName) + ")");
}

修改此类后,您需要修改下一个文件: \sitecore\shell\Controls\Rich Text Editor\InsertLink\InsertLink.xml 您需要在其中更改 codeBeside 部分

<CodeBeside Type="Sitecore.Shell.Controls.RichTextEditor.InsertLink.InsertLinkForm,Sitecore.Client"/>

有类似的东西:

<CodeBeside Type="YourNameSpace.YourInsertLinkForm,YourAssembly"/>
于 2013-11-03T16:56:09.910 回答
1

解决此问题的最简单方法是键入所需的链接文本,然后在单击“插入链接”之前选择它 - 这样您的超链接将包含您输入的任何文本,而不是默认为项目名称。

如果您想修改 Sitecore 在 RTE 字段中呈现链接的方式,则需要修改<renderField>管道 - 如果您在 web.config 中搜索此内容,您将看到此处涉及的不同类。使用dotPeek您可以反编译 Sitecore 源代码以了解其工作原理。然后,您可能可以创建自己的 renderField 管道处理程序来更改链接呈现行为,然后在 web.config 中引用这个新类。

于 2013-11-03T16:06:45.197 回答