我需要在页面加载之前对任何HTML Pro模块的内容运行RegEx。我假设自定义代码将进入此文件: /DesktopModules/HTML/HtmlModule.ascx - " OnPreRender"看起来对我来说是一个好地方。这是修改的正确位置/文件吗?
RegEX的目的是用自己的修改版本替换文本中找到的电子邮件地址,以防止垃圾邮件程序抓取它们。 (曾经有一些模块可以在DNN商店中使用它们,但它们现在已经停止使用;我之前已经使用过它们,但是它们将页面加载时间减慢了太多。)
我做过一些研究,但没有找到任何可用的例子。我所发现的并不足以让我实现我想要的东西:
任何人都可以帮助我使用代码的初始示例来执行以下操作:
现在,我看到的部分看起来像这样 - 我会在哪里插入该代码?
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);
}
感谢您的帮助!
答案 0 :(得分:0)
的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>