Dotnetnuke 如何在DNN 7中预处理HTML Pro模块内的文本?
在加载页面之前,我需要对任何HTML Pro模块的内容运行正则表达式。我假设自定义代码会进入这个文件:/DesktopModules/HTML/HtmlModule.ascx-“OnPreRender”看起来是个不错的地方。这是要修改的位置/文件吗 正则表达式的目的是将文本中的电子邮件地址替换为自己的修改版本,以防止垃圾邮件删除它们。(DNN Store中曾经有一些模块可以做到这一点,但现在已经停止使用了;我以前使用过这些模块,但它们太慢了页面加载时间。) 我做了一些研究,但没有找到任何有用的例子。我所发现的不足以实现我想要的:Dotnetnuke 如何在DNN 7中预处理HTML Pro模块内的文本?,dotnetnuke,dotnetnuke-7,Dotnetnuke,Dotnetnuke 7,在加载页面之前,我需要对任何HTML Pro模块的内容运行正则表达式。我假设自定义代码会进入这个文件:/DesktopModules/HTML/HtmlModule.ascx-“OnPreRender”看起来是个不错的地方。这是要修改的位置/文件吗 正则表达式的目的是将文本中的电子邮件地址替换为自己的修改版本,以防止垃圾邮件删除它们。(DNN Store中曾经有一些模块可以做到这一点,但现在已经停止使用了;我以前使用过这些模块,但它们太慢了页面加载时间。) 我做了一些研究,但没有找到任何有用的例
protected override void OnPreRender(System.EventArgs e)
{
if (true && HttpRuntime.Cache.Get("avt.MyTokens2.CorePatched") == "true") {
base.OnPreRender(e);
return;
}
if (Convert.ToBoolean(Settings["MyTokensReplace"]) == true) {
(lblContent.Controls[0] as LiteralControl).Text = Tokenize((lblContent.Controls[0] as LiteralControl).Text, ModuleConfiguration, false, true);
}
base.OnPreRender(e);
}
谢谢你的帮助 Bogdan
很高兴收到你的来信!下面的代码适用于我,虽然我没有HTML Pro模块,所以可能需要一些轻微的调整。不确定您想对电子邮件地址做什么,但下面的代码只是在@符号之前的位置添加了一个“X”。您可以根据需要进行调整
<%@ Import namespace="DotNetNuke.Modules.Html" %>
<%@ Import namespace="DotNetNuke.Entities.Portals" %>
<script language="c#" runat="server">
protected override void OnPreRender(System.EventArgs e)
{
HtmlTextController htmlTextController = new HtmlTextController();
WorkflowStateController workflowStateController = new WorkflowStateController();
int workflowId = htmlTextController.GetWorkflow(ModuleId, TabId, PortalId).Value;
HtmlTextInfo htmlContent = htmlTextController.GetTopHtmlText(ModuleId, false, workflowId);
if (htmlContent == null)
{
htmlContent = new HtmlTextInfo();
htmlContent.ItemID = -1;
htmlContent.StateID = workflowStateController.GetFirstWorkflowStateID(workflowId);
htmlContent.WorkflowID = workflowId;
htmlContent.ModuleID = ModuleId;
htmlContent.IsPublished = true;
htmlContent.Approved = true;
htmlContent.IsActive = true;
}
string pattern = "@";
string replacement = "X";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(htmlContent.Content,replacement);
htmlContent.Content = result;
int draftStateId = workflowStateController.GetFirstWorkflowStateID(workflowId);
int nextWorkflowStateId = workflowStateController.GetNextWorkflowStateID(workflowId, htmlContent.StateID);
int publishedStateId = workflowStateController.GetLastWorkflowStateID(workflowId);
htmlTextController.UpdateHtmlText(htmlContent, htmlTextController.GetMaximumVersionHistory(PortalId));
}
</script>
受保护的覆盖无效OnPreRender(System.EventArgs e)
{
HtmlTextController HtmlTextController=新的HtmlTextController();
WorkflowStateController WorkflowStateController=新的WorkflowStateController();
int workflowId=htmlTextController.GetWorkflow(ModuleId、TabId、PortalId).Value;
HtmlTextInfo htmlContent=htmlTextController.GetTopHtmlText(ModuleId,false,workflowId);
if(htmlContent==null)
{
htmlContent=新的HtmlTextInfo();
htmlContent.ItemID=-1;
htmlContent.StateID=workflowStateController.GetFirstWorkflowStateID(workflowId);
htmlContent.WorkflowID=WorkflowID;
htmlContent.ModuleID=ModuleID;
htmlContent.IsPublished=true;
htmlContent.Approved=true;
htmlContent.IsActive=true;
}
字符串模式=“@”;
字符串替换=“X”;
正则表达式rgx=新正则表达式(模式);
字符串结果=rgx.Replace(htmlContent.Content,replacement);
htmlContent.Content=结果;
int draftStateId=workflowStateController.GetFirstWorkflowStateID(workflowId);
int nextWorkflowStateId=workflowStateController.GetNextWorkflowStateID(workflowId,htmlContent.StateID);
int publishedStateId=workflowStateController.GetLastWorkflowStateID(workflowId);
htmlTextController.UpdateHtmlText(htmlContent,htmlTextController.GetMaximumVersionHistory(PortalId));
}
Justin,我们仍然使用MyToken,但我真的无法想象您会如何使用此功能。我希望保持输入方法相同/默认,只在将数据输出到网页之前修改数据。MyToken可以做什么,而不能用straight C#(它也支持正则表达式)来做?请澄清。另外,很高兴收到你的来信,伙计!