为了账号安全,请及时绑定邮箱和手机立即绑定

在 Liferay 7.2 中实现将 Web 内容自动保存为草稿

在 Liferay 7.2 中实现将 Web 内容自动保存为草稿

慕标5832272 2023-06-21 13:58:42
由于Liferay的Web Content默认不能自动保存为草稿,所以我需要实现这样的功能。我发现 Web 内容表单包含隐藏的输入字段,其 id 为“ _com_liferay_journal_web_portlet_JournalPortlet_workflowAction ”,对于具有“草稿”状态的 Web 内容,值=2 。另外,在Liferay的DB中journalarticle表中也有一个值为2的状态列。我想我应该找到注入一些 JS 代码的方法,检查这样的表单是否存在并且其字段的 value=2,如果是,则异步序列化和发送表单。我想知道是否有第二种方法可以检查是否有任何 Web 内容被编辑以及 Java 端的状态如何。然后我会注入 JS 代码来序列化并提交表单,而不检查任何源代码。我正在考虑创建DynamicInclude实例类。但是,我被告知解决方案不应与编辑器关联,而应直接与 Web 内容关联,因为编辑器不会仅在创建 Web 内容期间使用,可能也会在其他地方使用。我得到一个提示,ResourceFilter可能会有所帮助,但在我看来,文档中没有对其进行足够的描述,因此我无法理解它。我没有修改 Liferay 组件的经验,所以我不知道如何在实践中使用所有这些知识。我很乐意提供任何提示。编辑:现在我已经成功添加了异步序列化并提交Web内容表单的JS代码。问题是它只在第一次执行(发送302 POST 请求并接收200 GET 响应)。下次提交尝试后如果不刷新页面,则仅发送200 个 POST 请求而没有任何响应。有趣的是,此请求的预览包含错误“自您开始编辑以来,另一个用户已进行更改。请复制您的更改并重试。“。我不知道如何解决这个问题。我搜索了 Liferay 7.2 存储库并发现,当新版本与旧版本不同时,会抛出带有此错误消息的异常。这是没有意义的,因为 Web Content将其保存为草稿后版本没有改变,我什至在我的Java代码中打印出了响应内容,看起来这些版本是相同的。我很高兴获得任何帮助,因为我不知道如何继续. 下面放上我的JavaScript代码。window.saveDraft = function() {    var form = $('form#_com_liferay_journal_web_portlet_JournalPortlet_fm1');    var url = form.attr('action');    var p_auth = new URLSearchParams(url).get('p_auth');    var language = form.find('#_com_liferay_journal_web_portlet_JournalPortlet_languageId').attr('value');    var contentInput = form.find( "input[id^='_com_liferay_journal_web_portlet_JournalPortlet_content_INSTANCE_']" );    var shortContentInputId = contentInput.attr('id');    var contentInputIdRandomPart = shortContentInputId.substr(shortContentInputId.length - 4, shortContentInputId.length);    var content = contentInput.attr('value');    var fixedContent = content.replace(/\r?\n|\r/g, '');    //removing unnecessary line breaks    })};
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我已经成功创建了将 Web 内容异步保存为草稿的模块。在搜索引发 ArticleVersionException 的位置时,我忘记检查我的 IDE 是否标记了代码中的所有事件。事实证明,在检查提交日期是否正确的代码片段中抛出了异常。这就是为什么我需要在提交表单后在代码末尾设置实际时间戳值。在我的例子中,它是通过这行代码达到的:

form.find('#_com_liferay_journal_web_portlet_JournalPortlet_formDate').val(new Date().valueOf());


查看完整回答
反对 回复 2023-06-21
  • 1 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信