DataLife Engine v18.0 最终版发布

以下是已开发并添加的更改内容:

1. 全新的个人消息系统:网站新增了一个全新的个人消息系统。整个网站的个人消息系统已完全重写。现在,它不再仅仅是发送一条个人消息,也不再局限于只能以完整引用的方式回复单独的消息,而是一个成熟的对话系统。用户可以在一个合并的线程中查看所有消息,对话以聊天形式进行。收到消息后,用户可以在同一主题内反复回复并相互发送消息。如果用户认为对话已结束,或者想要整理个人消息,他们可以随时离开对话。但如果其他参与者在同一线程中发送新消息,已离开的参与者将自动恢复整个对话,他们可以再次查看完整对话并了解上下文。此外,如果其他参与者尚未阅读,用户现在可以编辑对话中的消息。如有必要,也可以从对话中删除消息。消息可以全部或部分引用,还有更多功能。

2. 添加对人工智能在文章创作与编辑中的支持与应用:在创建和编辑文章时添加了对人工智能的支持和应用。人工智能将帮助您快速创建所需文本、改写或更改写作风格、进行翻译等,满足您的各种需求。支持基于ChatGPT API使用人工智能。在设置中,您可以指定与ChatGPT通信的入口点,这样不仅可以使用OpenAI的直接ChatGPT,还能使用任何支持此API的服务。除此之外,您可以在设置中灵活配置如何使用ChatGPT,如采用哪种语言模型、哪些用户组可以使用人工智能、回复风格、最大限制以及回复长度的约束等。

3. 为不同父类别下的分类URL赋予相同名称的功能:添加了为不同父类别下的分类指定相同URL名称的功能。例如,您可以创建“games/rpg/news/”“games/shooters/news/”等分类结构。此外,优化了网站上涉及分类的各种链接生成算法,显著提高了性能,并在分类数量众多时减少了服务器资源消耗。

4. DataLife Engine控制面板中性能分析部分的新功能:在DataLife Engine控制面板的“性能分析”部分,添加了立即禁用特定脚本功能的能力,以减轻负载并提高性能。现在,您无需进入脚本设置查找相关设置来禁用特定功能,只需点击所需设置旁边的相应按钮即可直接禁用。使用AJAX技术,禁用操作可即时生效。

5. {custom ….}标签新增unique参数:对于使用{custom ….}标签输出文章的用户,添加了对新参数unique="yes"的支持。这表示如果文章已在网站上显示过,此块中的文章不应重复,即该块应显示唯一的文章。这有助于避免在用户输出块中出现相同新闻的重复显示,即使它们符合相同的输出标准。例如,两个标签{custom category="1" unique="yes" limit="1"}和{custom category="1" unique="yes" limit="1"}将显示不同的文章,尽管参数相同;第一个标签将显示该分类中的第一篇新闻,第二个标签将显示第二篇,跳过第一篇。同样,如果一篇文章已在{content}块中显示,若{custom ….}标签中存在此选项,则该文章不会再次显示。

6. 上传管理器对上传文件图标支持的增强:在上传管理器中,为上传的文件添加了更广泛的各种图标支持,便于识别不同文档,并添加了文件扩展名显示。

7. 添加在添加和编辑文章时直接下载上传文件的功能:在添加和编辑文章时,上传管理器中添加了直接下载上传到文章的文件的功能。

8. DLE播放器新增音频格式支持:使用DLE播放器上传和播放音乐及音乐播放列表时,添加了对OGG、FLAC、AAC格式的支持。

9. 网站按国家访问限制的改进:在按国家限制网站访问方面,添加了对IPv6地址的支持。此外,用于确定访客国家的数据库提供商已更改为IP2location的数据库,从而获得了更准确、更广泛的数据库。

10. 基于Cloudflare服务确定访客国家的功能:在管理面板的脚本设置中添加了一项功能,可根据Cloudflare服务的数据确定访客所在国家(前提是您的网站已连接并通过该服务进行代理)。这样可以减轻服务器负载,因为DataLife Engine无需自行在本地数据库中搜索。如果没有关于国家的数据,将自动在本地数据库中进行搜索。

11. 针对受限国家机器人访问的设置更新:管理面板中的脚本设置已更新,以便在网站限制特定国家访问时,允许或拒绝机器人访问网站(若机器人位于受限国家)。例如,如果网站对某些国家限制访问,您仍可以允许位于受限国家的搜索引擎对网站进行索引。

12. 启用针对VPN绕过限制的功能:在管理面板的脚本设置中,添加了针对某些国家启用阻止通过VPN绕过限制的功能。如果用户位于被禁止的国家并访问网站,他们将被阻止;如果他们尝试使用来自允许国家的VPN再次访问网站,也将被检测到并在网站上被阻止。

13. 显示用户当前所在国家的设置说明:在允许和拒绝国家访问网站的设置描述中,添加了DLE确定的用户当前所在国家。这样,网站管理员可以直观地看到一切是否正常运行,以及他们所在的国家是否按预期被识别,确保不会意外阻止自己。

14. 在控制面板添加和编辑文章时的访问设置增强:在控制面板中添加和编辑文章时,“访问”选项卡中添加了指定允许显示此文章的国家列表的功能。此外,还添加了指定禁止查看文章的国家列表的功能。这样,您可以轻松配置在哪些国家可以查看完整新闻,哪些国家不可以。

15. DataLife Engine控制面板中广告素材的国家定向功能:对于添加到DataLife Engine控制面板的广告素材,添加了指定允许展示这些广告横幅和素材的国家列表的功能。此外,现在还可以指定禁止查看的国家列表。这样,您可以轻松配置在哪些国家显示此代码,哪些国家不显示,从而实现按国家定向展示。

16. DataLife Engine下载管理器自动保存上传参数功能:DataLife Engine下载管理器中添加了在将图像和文件上传到服务器时自动保存设置参数的功能。这些参数将在再次打开管理器窗口时恢复。例如,如果您选择不应用水印、更改了缩小副本的大小、更改了存储位置,并且由于某种原因离开了页面或导航到另一篇文章,所有这些设置都将保存在浏览器的本地存储中。当您重新打开下载管理器时,所有设置的参数将被恢复,而不是恢复为默认值。这样,您无需每次都重新设置参数。

17. 控制面板脚本设置更新以自定义反馈表单默认用户组:控制面板中的脚本设置已更新,允许指定默认情况下在网站反馈表单中显示的用户组(前提是电子邮件未发送给特定用户)。以前,那里只显示管理员和主编组的用户。现在您可以指定自己的默认用户组。

18. RSS源导入设置新增源链接选项:对于网站的RSS源导入,在流设置中添加了一个选项,用于指定是否在导入新闻时包含获取新闻的源链接。您可以选择在简短描述、完整描述或两个字段中都启用添加源链接,或者在将文章导入网站时禁用添加源链接。

19. 移除BBCODES和Floara编辑器:移除了BBCODES和Floara编辑器。这些编辑器在全球范围内已过时,并且很久以前就完全停止了支持。没有为它们添加新功能。我们知道移除这些编辑器并非最受欢迎的举措,用户也要求我们不要删除这些编辑器。然而,不能无限期地维护不受支持的编辑器,因为这些编辑器严重阻碍了整个脚本的开发。生成不同代码需要额外的检查和文本过滤,并且在处理文章时会执行大量冗余代码。因此,决定完全放弃这些编辑器,这大大简化了代码,加快了添加文章时的代码处理速度,同时减少了代码测试时间。此外,还使我们能够将精力和资源集中在添加新功能和能力上。现在,文章使用单一的TinyMCE编辑器,添加和编辑文章时的处理速度显著加快,服务器资源消耗也有所降低。对于评论,对于那些不希望评论中有任何内容格式设置、只希望有简短干净文本的网站,也可以选择完全禁用编辑器。

20. 管理面板和网站上添加和编辑文章时可视化编辑器的改进:在管理面板和网站上添加和编辑文章时,对可视化编辑器进行了更改,默认情况下它包含一个带有最常用内容创建按钮的单个面板。如果需要完整的按钮集,用户可以在使用编辑器时展开面板。此外,对于每个字段,编辑器所选的折叠或展开状态会自动保存,并在重新加载页面后保持不变。这样,默认情况下编辑器占用更少空间,为可编辑内容留出更多空间,并且您可以为每个字段单独选择并保存编辑器的状态。

21. 网站评论中手机适配编辑器模式启用和禁用方式的更改:对网站评论中手机适配编辑器模式的启用和禁用方式进行了更改。不再需要在控制面板的脚本设置中单独启用或禁用它。现在,当移动设备访客使用时,它将自动开启。

22. DataLife Engine控制面板设计选择中添加编辑器设计选择功能:在DataLife Engine控制面板设计选择设置中,添加了选择编辑器设计的功能。每个管理面板用户可以选择经典编辑器视图或轻量版本。轻量版本提供了一个简洁的编辑器界面,使用户能够直接专注于正在编写的内容。此外,用户可以启用编辑器自动高度,它将自动调整以占据与字段内内容所需相同的屏幕空间。因此,小内容在屏幕上占用空间小,而较大内容则允许显示更大的可编辑区域。

23. 添加网站撰写个人消息时对移动适配编辑器的支持:添加了在网站上撰写个人消息时对移动适配编辑器的支持。

24. 添加网站使用AJAX撰写个人消息时对编辑器黑暗主题的支持:添加了在网站上使用AJAX撰写个人消息时对编辑器黑暗主题的支持。

25. 优化编辑器插入文本时的清理功能:改进了插入编辑器时的文本清理功能,以去除插入文本代码中的“垃圾代码”。

26. 文章快速编辑支持粘贴带HTML标签文本:在文章快速编辑中,添加了支持从浏览器剪贴板粘贴保留HTML标签的文本的功能。

27. 管理面板封禁用户时添加管理员日志:在管理面板的用户管理部分封禁用户时,会添加执行封禁操作的管理员账户日志。这使得其他管理员可以在用户管理面板中立即轻松查看是哪位管理员对用户实施了封禁。在网站有大量版主和管理员的情况下,这有助于加快解决任何有争议的问题。

28. 封禁信息模板新增标签支持:对于显示账户或访问被封禁信息的模板(banned.tpl),添加了对新标签的支持:[banned - from]文本[/banned - from],如果封禁是由人而非自动(例如按国家)执行的,则显示其中包含的文本。此外,还添加了一个新标签:{banned - from},它显示对用户执行封禁的管理员的登录名。这样,被封禁的用户可以立即看到是谁以及为什么他们在网站上被封禁。

29. {catmenu …}标签新增idexclude参数:对于用于显示分类列表的全局模板标签{catmenu …},添加了对新参数idexclude="1,2,3 - 5"的支持,您可以在此指定不应包含在分类列表中的分类ID或分类范围,除指定分类外的所有分类都将显示。

30. 用户组设置中限制用户对新闻文章负面评价数量:在用户组设置中添加了限制用户对新闻文章给出负面评价和不喜欢数量的功能。您可以指定用户每天最多可对新闻文章给出的负面评价数量。例如,设置为2,用户一天内只能给出两个负面评价。正面评价数量不受限制。这样,您可以保护网站免受恶意访客大量恶意差评的影响。

31. 用户组设置中限制用户对评论负面评价数量:在用户组设置中添加了限制用户对评论给出负面评价和不喜欢数量的功能。您可以指定用户每天最多可对评论给出的负面评价数量。例如,设置为2,用户一天内只能对评论给出两个负面评价。正面评价数量不受限制。这样,您可以保护网站免受恶意访客大量恶意差评的影响。

32. 评论模板新增回复相关标签:在评论模板(commets.tpl)中添加了对新标签[replycount]文本[/replycount]的支持,如果评论有其他用户的回复,则显示其中包含的文本;还添加了相反的标签[not - replycount]文本[/not - replycount],如果评论没有回复,则显示其中包含的文本。这样,您可以为评论回复信息创建更灵活的设计。

33. 优化DataLife Engine控制面板中移动设备上文章编辑器的显示:改进并优化了DataLife Engine控制面板中移动设备上文章编辑器的显示。

34. 优化网站文章快速编辑时编辑器的显示:改进并优化了网站上文章快速编辑时编辑器的显示。编辑器现在根据字段中的内容量具有动态高度。如果字段中只写了很少的信息,编辑器将占用与内容成比例的空间。这在有许多字段时便于编辑信息。

35. 网站评论中显示被封禁用户组信息:在网站评论中显示用户组时,如果用户已被封禁,现在会显示表明用户被封禁的信息,类似于在其个人资料中显示其组的方式。

36. 检查网站显示用户在线状态时考虑封禁情况:在网站上显示用户是否在线的信息时,添加了检查该用户之前是否也在网站上被封禁的功能。如果他们被封禁,其状态将始终显示为离线,即使他们尝试成功登录。

37. 优化控制面板批量邮件消息预览:修订并改进了控制面板中批量邮件消息的预览。改进了设计、字体,并添加了对用户个人自定义的面板样式设置的全面支持。还添加了对控制面板视觉设计和消息发送窗口的全面支持。

38. 网站交叉链接管理部分支持双引号搜索替换关键词:在网站的交叉链接管理部分,添加了对需要查找和替换的关键词使用双引号的功能。

39. 添加使用[mediа=…..]标签插入YouTube直播的功能:添加了使用[mediа=…..]标签在您的网站上插入YouTube服务直播的功能。

40. 将评论防灌水保护功能移至用户组设置:评论防灌水保护功能已从脚本的常规设置移至用户组设置。这样,您可以为每个用户组分别启用和禁用此保护,还可以为每个组指定自己的重复评论添加到网站的超时时间。

41. 优化DataLife Engine控制面板RSS导入文章搜索模板系统:DataLife Engine控制面板中在RSS导入文章时通过搜索模板搜索文章的系统已得到显著改进和优化。现在,您可以从网站页面复制任何复杂的多行代码作为起始和结束代码,无需使用带有{skip}标签的复杂配置。

42. 优化移动设备上文章和评论页面的导航输出:优化并改进了移动设备上文章和评论页面的导航输出。当访客使用智能手机查看网站时,导航中的页面元素数量显著减少,使导航能够轻松适应单行显示,而无需将导航链接移动到其他行。这使页面在保持完整导航便利性的同时,具有更正确的视觉外观。

43. 添加访问被拒时的HTTP 503头信息:如果网站访问被拒绝,例如用户被封禁或受国家限制,将添加正确的HTTP 503头信息,表明页面暂时不可用。

44. 检查网站所有AJAX操作的国家限制访问:对网站上执行的所有AJAX操作添加了国家限制访问检查,而不仅仅是直接查看网站时。这可以阻止来自被禁止国家的自动机器人(如果它们已获得执行某些自动操作所需的参数和令牌)。

45. 管理面板添加插件时检查插件名称是否填写:在管理面板中添加插件时,在将数据发送到服务器之前,添加了对插件名称是否填写的检查,以避免因必填字段未填写而出现错误,并防止提交后数据丢失。

46. 更新对使用[mediа=…]标签嵌入Twitter帖子的支持:由于Twitter服务将其域名更改为x.com,添加了对使用[mediа=…]标签正确嵌入Twitter帖子的支持。

47. 添加对PHP 8.4.xx系列的支持:添加了对新的PHP 8.4.xx系列的支持。

48. 改进并加快添加和编辑文章时大文本的处理,减少内存使用:改进并加快了添加和编辑文章时大文本的处理速度,在某些情况下还减少了内存使用。

49. 优化控制面板和网站上添加文章时构建分类树的算法:改进并优化了在控制面板和网站上添加文章时构建分类树的算法。这在分类数量众多的情况下显著提高了页面渲染速度。

50. 优化一些模板标签的处理:优化并改进了一些模板标签的处理,在某些情况下能够加快模板的渲染速度并减少内存使用。

51. 移除对OpenSearch的支持:鉴于OpenSearch技术已然过时,且不再受当前浏览器支持,故而移除了对其的支持。

52. 修复网站可向被封禁用户通过反馈发送邮件的问题:修复了一个问题,即此前网站能够通过反馈向被封禁的用户发送电子邮件消息。

53. 修复特定脚本设置下网站部分AJAX功能失效问题:修复了这样一个问题,若脚本设置禁用了网站授权支持,而管理员仍处于DataLife Engine控制面板的登录状态时,网站上的某些AJAX功能可能无法正常运行。

54. 修复控制面板批量操作中无法移除文章所有分类的问题:修复了一个问题,即在控制面板使用批量操作,针对选定文章选择“更改分类”动作时,无法从文章中移除所有分类。

55. 修复评论输出模板中部分模板标签在AJAX评论页导航时工作异常问题:修复了一个问题,当启用通过AJAX进行评论页面导航时,评论输出模板中的某些模板标签无法正常工作。

56. 修复脚本中先前检测并报告的小错误:修复了脚本中之前已检测到并报告的一些小错误。

 

模版变化

1. 将 CSS 样式添加到您的模板:
<span class="hljs-selector-class">.pm</span> <span class="hljs-selector-tag">th</span>{
    <span class="hljs-attribute">text-align</span>: left;
    <span class="hljs-attribute">font-weight</span>: <span class="hljs-number">500</span>;
    <span class="hljs-attribute">white-space</span>: nowrap;
}
<span class="hljs-selector-class">.pm</span> <span class="hljs-selector-tag">th</span><span class="hljs-selector-class">.pm_checkbox</span> {
	<span class="hljs-attribute">text-align</span>: center;
}
<span class="hljs-selector-class">.pm_list</span><span class="hljs-selector-class">.pm_subj</span>, <span class="hljs-selector-class">.pm_list</span><span class="hljs-selector-class">.pm_icon</span>, <span class="hljs-selector-class">.pm_list</span><span class="hljs-selector-class">.pm_last_user</span> {
 <span class="hljs-attribute">cursor</span>: pointer;
}
<span class="hljs-selector-class">.pm_list</span><span class="hljs-selector-class">.pm_icon</span> svg {
	<span class="hljs-attribute">width</span>: <span class="hljs-number">1.4rem</span>;
	<span class="hljs-attribute">height</span>: <span class="hljs-number">1.4rem</span>;
	<span class="hljs-attribute">vertical-align</span>: middle;
}

<span class="hljs-selector-class">.pm_list</span><span class="hljs-selector-class">.pm_icon</span><span class="hljs-selector-class">.pm-unread-image</span> {
 <span class="hljs-attribute">color</span>: <span class="hljs-number">#3394e6</span>;
}
<span class="hljs-selector-class">.pm</span> <span class="hljs-selector-tag">td</span><span class="hljs-selector-class">.pm_list</span><span class="hljs-selector-class">.pm_icon</span>, <span class="hljs-selector-class">.userstop</span> <span class="hljs-selector-tag">td</span>, <span class="hljs-selector-tag">th</span><span class="hljs-selector-class">.pm_head</span><span class="hljs-selector-class">.pm_icon</span> {
	<span class="hljs-attribute">border-bottom</span>: none;
}
<span class="hljs-selector-class">.pm_list</span><span class="hljs-selector-class">.pm_icon</span><span class="hljs-selector-class">.pm-reply-image</span> {
	<span class="hljs-attribute">color</span>: <span class="hljs-number">#087e02c4</span>;
}
<span class="hljs-selector-class">.pm_list</span><span class="hljs-selector-class">.pm_icon</span><span class="hljs-selector-class">.pm-read-image</span> {
	<span class="hljs-attribute">color</span>: <span class="hljs-number">#afafaf</span>;
}

<span class="hljs-selector-class">.pm_list</span> <span class="hljs-selector-class">.pm_last_message</span>, <span class="hljs-selector-class">.pm_list</span> <span class="hljs-selector-class">.pm_last_date</span>, <span class="hljs-selector-class">.pm_list</span> <span class="hljs-selector-class">.pm_with_user</span> {
	<span class="hljs-attribute">color</span>: <span class="hljs-number">#64748b</span>;
	<span class="hljs-attribute">font-size</span>: .<span class="hljs-number">8rem</span>;
}
<span class="hljs-selector-class">.pm</span> <span class="hljs-selector-tag">tbody</span> > <span class="hljs-selector-tag">tr</span><span class="hljs-selector-pseudo">:hover</span> {
    <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#e2e8f099</span>;
}
<span class="hljs-selector-class">.pm_navigation</span> {
	<span class="hljs-attribute">margin-top</span>: <span class="hljs-number">1rem</span>;
}
<span class="hljs-selector-class">.pm_navigation</span> <span class="hljs-selector-class">.navigation</span> {
	<span class="hljs-attribute">display</span>: inline-block;
	<span class="hljs-attribute">color</span>: <span class="hljs-number">#333333</span>;
	<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#f5f5f5</span>;
	<span class="hljs-attribute">border-radius</span>: <span class="hljs-number">0.188rem</span>;
	<span class="hljs-attribute">padding</span>: .<span class="hljs-number">4rem</span>;
}

<span class="hljs-selector-class">.pm_navigation</span> <span class="hljs-selector-class">.navigation</span> <span class="hljs-selector-tag">a</span>, <span class="hljs-selector-class">.pm_navigation</span> <span class="hljs-selector-class">.navigation</span> <span class="hljs-selector-tag">span</span> {
    <span class="hljs-attribute">padding</span>: <span class="hljs-number">0.5rem</span>;
    <span class="hljs-attribute">min-width</span>: <span class="hljs-number">2.25rem</span>;
}
<span class="hljs-selector-class">.pm_navigation</span> <span class="hljs-selector-class">.navigation</span> <span class="hljs-selector-tag">span</span> {
    <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#4581d0</span>;
    <span class="hljs-attribute">color</span>: <span class="hljs-number">#fff</span>;
}
<span class="hljs-selector-class">.pm_navigation</span> <span class="hljs-selector-class">.navigation</span> <span class="hljs-selector-tag">a</span> {
    <span class="hljs-attribute">text-decoration</span>: none;
    <span class="hljs-attribute">color</span>: <span class="hljs-number">#000</span>;
}
<span class="hljs-selector-class">.pm_navigation</span> <span class="hljs-selector-class">.navigation</span> <span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span> {
    <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#e2e8f0</span>;
}
CSS
2. 有必要使pm.tpl模板适应新的个人消息系统

关键的变化在于,现在信件中的消息输出块位于[messages]…[/messages]标签块内,而该标签块又位于[readpm]…[/readpm]标签块内,同时还有重写的阅读块和编辑器输出标签。块结构示例如下:

[readpm]
    Message subject: {subj}
    [messages]
        The code for displaying messages
    [/messages]
    Reply to the message
    {editor}
   <span class="hljs-tag"><<span class="hljs-name">button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"submit"</span>></span>Answer<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
[/readpm]
XML

作为构建模板的示例,你可以使用标准模板中的代码:

<span class="hljs-tag"><<span class="hljs-name">article</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"box story"</span>></span>
	<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"box_in"</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">h1</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"title h1"</span>></span>Personal messages<span class="hljs-tag"></<span class="hljs-name">h1</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"pm-box"</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">nav</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"pm-menu"</span>></span>
				[inbox]<span class="hljs-tag"><<span class="hljs-name">span</span>></span>Messages list<span class="hljs-tag"></<span class="hljs-name">span</span>></span>[/inbox]
				[new_pm]<span class="hljs-tag"><<span class="hljs-name">span</span>></span>New message<span class="hljs-tag"></<span class="hljs-name">span</span>></span>[/new_pm]
			<span class="hljs-tag"></<span class="hljs-name">nav</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"pm_status"</span>></span>
				{pm-progress-bar}
				{proc-pm-limit} % / ({pm-limit} messages)
			<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
		<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
[pmlist]
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"pmlist"</span>></span>
	{pmlist}
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
[/pmlist]

[newpm]
<span class="hljs-tag"><<span class="hljs-name">h4</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"heading"</span>></span>New message<span class="hljs-tag"></<span class="hljs-name">h4</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"addform addpm"</span>></span>
	<span class="hljs-tag"><<span class="hljs-name">ul</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"ui-form"</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"form-group combo"</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"combo_field"</span>></span>
				<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"Recipient name"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"name"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"{author}"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"wide"</span> <span class="hljs-attr">required</span>></span>
			<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"combo_field"</span>></span>
				<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"Subject"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"subj"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"{subj}"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"wide"</span> <span class="hljs-attr">required</span>></span>
			<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
		<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"comment-editor"</span>></span>{editor}<span class="hljs-tag"></<span class="hljs-name">li</span>></span> 
	[recaptcha]
		<span class="hljs-tag"><<span class="hljs-name">li</span>></span>{recaptcha}<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
	[/recaptcha]
	[question]
		<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"form-group"</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">"question_answer"</span>></span>Question: {question}<span class="hljs-tag"></<span class="hljs-name">label</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"Answer"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"question_answer"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"question_answer"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"wide"</span> <span class="hljs-attr">required</span>></span>
		<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
	[/question]
	<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
	<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"form_submit"</span>></span>
		[sec_code]
			<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"c-captcha"</span>></span>
				{sec_code}
				<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"Enter the code"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Enter the code"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"sec_code"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"sec_code"</span> <span class="hljs-attr">required</span>></span>
			<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
		[/sec_code]
		<span class="hljs-tag"><<span class="hljs-name">button</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"btn btn-big"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"submit"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"add"</span>></span><span class="hljs-tag"><<span class="hljs-name">b</span>></span>Send<span class="hljs-tag"></<span class="hljs-name">b</span>></span><span class="hljs-tag"></<span class="hljs-name">button</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">button</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"btn-border btn-big"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"dlePMPreview()"</span>></span>Preview<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
	<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
[/newpm]

	<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">article</span>></span>

[readpm]
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"comments"</span>></span>
	<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"box"</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">h4</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"heading"</span>></span>{subj}<span class="hljs-tag"></<span class="hljs-name">h4</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"com_list"</span>></span>
[messages]
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"comment"</span>></span>
	<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"com_info"</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"avatar"</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"cover"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-image: url(/templates/New2022/dleimages/noavatar.png);"</span>></span>{login}<span class="hljs-tag"></<span class="hljs-name">span</span>></span>
			[online]<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"com_online"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"{login} - online"</span>></span>Online<span class="hljs-tag"></<span class="hljs-name">span</span>></span>[/online]
		<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"com_user"</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">b</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"name"</span>></span>{author}<span class="hljs-tag"></<span class="hljs-name">b</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grey"</span>></span>
				from: 2022-06-19, 22:07
			<span class="hljs-tag"></<span class="hljs-name">span</span>></span>
		<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"meta"</span>></span>
			<span class="hljs-tag"><<span class="hljs-name">ul</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"left"</span>></span>
				<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"edit_btn"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Edit"</span>></span>
					[pm-edit]<span class="hljs-tag"><<span class="hljs-name">i</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Edit"</span>></span>Edit<span class="hljs-tag"></<span class="hljs-name">i</span>></span>[/pm-edit]
				<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
				<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"reply grey"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Quote"</span>></span>
					温馨提示: 此处内容需要评论本文后才能查看.
				<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
				<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"reply grey"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Ignore"</span>></span>
					[ignore]<span class="hljs-tag"><<span class="hljs-name">svg</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"icon icon-reply"</span>></span><span class="hljs-tag"><<span class="hljs-name">use</span> <span class="hljs-attr">xlink:href</span>=<span class="hljs-string">"#icon-dislike"</span>></span><span class="hljs-tag"></<span class="hljs-name">use</span>></span><span class="hljs-tag"></<span class="hljs-name">svg</span>></span><span class="hljs-tag"><<span class="hljs-name">span</span>></span>Ignore<span class="hljs-tag"></<span class="hljs-name">span</span>></span>[/ignore]
				<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
				<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"complaint"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Complain"</span>></span>
					[complaint]<span class="hljs-tag"><<span class="hljs-name">svg</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"icon icon-bad"</span>></span><span class="hljs-tag"><<span class="hljs-name">use</span> <span class="hljs-attr">xlink:href</span>=<span class="hljs-string">"#icon-bad"</span>></span><span class="hljs-tag"></<span class="hljs-name">use</span>></span><span class="hljs-tag"></<span class="hljs-name">svg</span>></span><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"title_hide"</span>></span>Complain<span class="hljs-tag"></<span class="hljs-name">span</span>></span>[/complaint]
				<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
				<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"del"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Delete"</span>></span>
					[del]<span class="hljs-tag"><<span class="hljs-name">svg</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"icon icon-cross"</span>></span><span class="hljs-tag"><<span class="hljs-name">use</span> <span class="hljs-attr">xlink:href</span>=<span class="hljs-string">"#icon-cross"</span>></span><span class="hljs-tag"></<span class="hljs-name">use</span>></span><span class="hljs-tag"></<span class="hljs-name">svg</span>></span><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"title_hide"</span>></span>Delete<span class="hljs-tag"></<span class="hljs-name">span</span>></span>[/del]
				<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
			<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
		<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
	<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
	<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"com_content"</span>></span>
		<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"text"</span>></span>{text}<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
		[signature]<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"signature"</span>></span>--------------------<span class="hljs-tag"><<span class="hljs-name">br</span>></span>{signature}<span class="hljs-tag"></<span class="hljs-name">div</span>></span>[/signature]
	<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
[/messages]
		<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"box_in form-sep"</span>></span>
	<span class="hljs-tag"><<span class="hljs-name">h3</span>></span>Reply to a message<span class="hljs-tag"></<span class="hljs-name">h3</span>></span>
	{editor}
	<span class="hljs-tag"><<span class="hljs-name">br</span>></span><span class="hljs-tag"><<span class="hljs-name">button</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"btn btn-big"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"submit"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"submit"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Reply"</span>></span><span class="hljs-tag"><<span class="hljs-name">b</span>></span>Reply<span class="hljs-tag"></<span class="hljs-name">b</span>></span><span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
	<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
[/readpm]
XML
3. 从addnews.tpl新闻模板中移除负责BBCODES编辑器输出的标签,并用可视化编辑器输出标签替换它们。

 

DataLife Engine v18.0 最终版发布

已经登录?刷新
订阅评论
提醒
guest的头像


0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x