前端(html和css)的设置方式使得Sitecore内容字段中的描述文本需要包含<p>
标记。
因此,默认情况下,RTE将文本包装在<p>
标记= TRUE中。但是你需要点击 Enter 或复制/粘贴多个段落。
如果只是一行,我们如何强制Sitecore添加P标签?
答案 0 :(得分:7)
幸运的是,从dll开始,我发现了一个特殊功能:
protected virtual void SetupScripts()
{
foreach (XmlNode node in Factory.GetConfigNodes("clientscripts/htmleditor/script"))
this.Result.Scripts.AppendFormat("<script src=\"{0}\" language=\"{1}\"></script>\n", (object) XmlUtil.GetAttribute("src", node), (object) XmlUtil.GetAttribute("language", node));
}
好,嗯?毕竟,SITECORE的开发人员很聪明。 所以我在web.config中做了这个,
<!— CLIENT SCRIPTS
These script files are included in the client, e.g. '<script src="/myscript.js" language="JavaScript"/>'
—>
<clientscripts>
<everypage />
<htmleditor>
<script src=”/assets/js/CustomRTE.js” language=”javascript”/>
</htmleditor>
</clientscripts>
从EditorWindow.aspx覆盖scSendRequest
函数。
window.scSendRequest = function(evt, command) {
var editor = scRichText.getEditor();
if (editor.get_mode() == 2) { //If in HTML edit mode
editor.set_mode(1); //Set mode to Design
}
var htmls = editor.get_html(true);
var regex = /<p[^>]*>.*?<\/p>/i;
var match = regex.exec(htmls);
if(match == null && htmls != null) {
htmls = "<p>" + htmls + "</p>";
}
//$("EditorValue").value = editor.get_html(true);
$("EditorValue").value = htmls;
scForm.browser.clearEvent(evt);
scForm.postRequest("", "", "", command);
return false;
}
AND YAY ..双彩虹和独角兽。
答案 1 :(得分:1)
您也可以为此要求创建自己的自定义解决方案。 您可以在
中创建一个新的管道事件<saveRichTextContent>
管道 - 这可以让您在sitecore中的富文本编辑器上点击保存时附加标记
<renderField>
管道 - 如果原始rtf文本中没有标记,则可以在渲染页面时将文本包装成<p></p>
标记。
如果你选择方法1:<saveRichTextContent>
您可以在web.config中添加管道:
<processor type="Sitecore72.Classes.WrapRichTextInParagraphOnSave, Sitecore72" />
您可以使用以下相应的代码:
namespace Sitecore72.Classes
{
public class WrapRichTextInParagraphOnSave
{
public void Process(SaveRichTextContentArgs args)
{
if (!(args.Content.Trim().StartsWith("<p>") && args.Content.Trim().EndsWith("</p>")))
args.Content = "<p>" + args.Content + "</p>";
}
}
}
请注意,只有当您使用富文本字段的显示编辑器时才会触发此管道:
如果你选择方法2:<renderField>
要附加到此管道,您将使用此配置:
<processor type="Sitecore72.Classes.WrapRichTextInParagraphOnRender, Sitecore72" />
您可以使用以下相应的代码:
namespace Sitecore72.Classes
{
public class WrapRichTextInParagraphOnRender
{
public void Process(RenderFieldArgs args)
{
if (args.FieldTypeKey == "rich text" && !(args.Result.FirstPart.Trim().StartsWith("<p>") && args.Result.FirstPart.Trim().EndsWith("</p>")))
args.Result.FirstPart = "<p>" + args.Result.FirstPart + "</p>";
}
}
}
对于这两者,请确保添加对Sitecore.Kernel.dll和HtmlAgilityPack.dll的引用。这两个都可以与sitecore包解决方案一起使用。