锁定节点或实体以防止并发编辑 -- 7 领域 和 nodes 领域 drupal 相关 的问题

Locking nodes or entities to prevent concurrent editing


2
vote

问题

中文

我没有需要这个,但另一个(家庭建造的梨)CMS I支持客户端使用锁定防止两个用户能够同时编辑一段内容。它可能是刺激性的,但可以防止失去工作。

我假设如果您有多个站点编辑器,它可能是宝贵的。

是必要的吗?是一个内容锁定一个可行的选项?

英文原文

I have not had a need for this, but another (home built PEAR) CMS I support for a client uses locking to prevent two users from being able to edit a piece of content at the same time. It can be irritating but could prevent loss of work.

I suppose if you have multiple site editors it could be invaluable.

Is it necessary? Is the module content lock a viable option?

     
 
 

回答列表

5
 
vote
vote
最佳答案
 

我相信这已经在某种程度上实现了。如果两个用户正在编辑同一块内容,并且一个提交更改,则其他用户将在尝试执行相同时收到此消息:

此页面上的内容已被另一个用户修改,或者您已经使用此表单提交了修改。因此,您的更改无法保存。

它发生在 node_validate() 功能,以防您有兴趣签出代码。
 

I believe this is already implemented to some degree. If two users are editing the same piece of content, and one submits changes, the other user will receive this message when trying to do the same:

The content on this page has either been modified by another user, or you have already submitted modifications using this form. As a result, your changes cannot be saved.

It happens in the node_validate() function in case you're interested in checking out the code.

 
 
         
         
1
 
vote
以下是解决此问题的可能解决方案,该问题使用标志模块,与规则模块将其工作。阅读更多详细信息...

步骤1:创建一个编辑exition标志

创建全局(不是用户特定的)标志,并说出您的名称(标签)编辑进度标志(='EIP'短)。此标志的目的是如此:

  • 如果为节点打开此标志,则表示"某人正在编辑此节点,因此不允许启动此节点的任何其他编辑会话" 。
  • 如果未打开节点的标志,则表示"节点可用于授权用户开始编辑它" 。

步骤2:如果EIP标志设置为

,则创建规则以禁止编辑

如果节点的EIP标志已设置,则创建规则以禁止编辑节点。要识别要为节点开始编辑会话的请求,请使用像 node/xyz/edit (带 xyz = nid)的URL)。< / p>

参考我对关于"如何通过节点/ 12限制对节点的访问,并允许通过诸如内容/ omeitle的路径访问,其中包含一个非常接近此规则所需的规则:

  • 使用相同的规则事件,即"drupal正在初始化" (要在实际允许启动的编辑会话之前通过规则捕获此编辑事件!)。

  • 稍微调整正则表达式,通过向其添加 /edit

  • 添加额外条件以验证此节点的EIP-标志是否已打开(表示已启动此节点的其他一些编辑会话)。

  • 将规则操作调整为(a)发出适当的消息(已启动的其他一些编辑会话)和(b)将用户重定向到适合您需求的其他路径(例如:只是 node/xzy )。

步骤3:创建规则以在编辑开始时设置EIP标志

创建规则以设置节点的EIP标志,每当授权用户请求开始节点的编辑会话时。要认识到这样的请求,请使用 node/xyz/edit(带 xyz = nid)的URL)。

参考我在第2步中提到的答案,其中包含一个非常接近此规则所需的规则:

  • 使用相同的规则事件,即"drupal正在初始化" (要在实际允许启动的编辑会话之前通过规则捕获此编辑事件!)。

  • 稍微调整正则表达式,通过向其添加 /edit

  • 添加额外条件以验证此节点的EIP标志是否未打开(表示此节点的其他编辑会话存在)。

  • 调整规则操作以设置EIP标志。

步骤4:创建规则以在编辑结束时取消设置EIP标志

创建规则以在授权用户请求结束节点的编辑会话时,以使节点的EIP标记未设置为节点。

以下是本规则的摘要:

  • 使用规则事件"保存内容后" 。
  • 使用规则操作来取消配置EIP标志。

步骤5:合并步骤2和步骤3(可选)

如果您想执行/考虑,您应该能够在单个规则中从步骤2 步骤3 条件规则模块。请参阅问题如何防止使用规则模块时保存节点?用于如何使用此模块的示例(对于其中不存在很多文档)。

 

Below is a possible solution to address this question, which implements an edit-in-progress (EIP) feature using the Flag module, combined with the Rules module to get it to work. Read on for more details ...

Step 1: Create an edit-in-progress flag

Create a global (not user specific) flag, and say you name (label) it edit-in-progress flag (='EIP' for short). The purpose of this flag is like so:

  • If this flag is turned on for a node, it means "somebody is editing this node, so do not allow any additional edit sessions for this node to be started".
  • If this flag is not turned on for a node, it means "the node is available for authorized users to start editing it".

Step 2: Create a rule to disallow edit if the EIP flag is set

Create a rule to disallow edit of a node if the EIP flag for a node is already set. To recognize a request to start an edit session for a node, use an URL like node/xyz/edit (with xyz = nid of the node).

Refer to my answer to the question about "How to restrict access to a node via node/12 and allow access via a path like content/sometitle?", which contains a rule that is pretty close to what's needed for this rule here:

  • Use the same Rules Event, i.e. "Drupal is initializing" (you want to catch this edit event via Rules BEFORE the edit session actually allowed to be started!).

  • Slightly adapt the regular expression, by adding /edit to it.

  • Add an extra condition to verify if the EIP-flag for this node is ALREADY turned on (which indicates some other edit session for this node was started already).

  • Adapt the Rules Action to (a) issue an appropriate message (that some other edit session is already started) and (b) redirect the user to whatever other path that fits your needs (e.g: just node/xzy).

Step 3: Create a rule to SET the EIP flag when an edit starts

Create a rule to SET the EIP flag for a node whenever an authorized user requests to start an edit session for a node. To recognize such request, use an URL like node/xyz/edit (with xyz = nid of the node).

Refer to my answer mentioned in Step 2, which contains a rule that is pretty close to what's needed for this rule here:

  • Use the same Rules Event, i.e. "Drupal is initializing" (you want to catch this edit event via Rules BEFORE the edit session actually allowed to be started!).

  • Slightly adapt the regular expression, by adding /edit to it.

  • Add an extra condition to verify if the EIP-flag for this node is NOT turned on (which indicates no other edit session for this node exists).

  • Adapt the Rules Action to SET the EIP flag.

Step 4: Create a rule to UNSET the EIP flag when an edit ends

Create a rule to UNSET the EIP flag for a node whenever an authorized user requests to end an edit session for a node.

Here is a summary of this rule:

  • Use Rules Event "after saving content".
  • Use Rules Action to UNSET the EIP flag.

Step 5: Merge Step 2 and Step 3 (optional)

Should you want to do/consider so, you should be able to merge the 2 Rules from Step 2 and Step 3 in a single Rule, using the Conditional Rules module. Refer to my answer to the question How to prevent a node being saved when using the Rules module? for a sample of how to use this module (for which not a lot of documentation seems to exist).

 
 
0
 
vote

当两个人编辑同一页面时,一个提交更改时,有一个高风险,同时第二个人已经对同一页面进行了一些将丢失的内容。 在那里,我发现,存在这种模块的很大用途。

 

When two people edit the same page and one submits changes there is a hight risk that at the same time the second person has made some changes to the same page that will be lost. There, I find, exists the great use of this module.

 
 
0
 
vote

"取消阻止" 用于编辑它的节点,您可以从管理页面UI中清除缓存。在Drupal 7中它是主菜单,第一个图标(家) - &gt;冲洗所有缓存。

 

To "unblock" the node for editing it you can clear cache from within the admin page UI. In Drupal 7 it is in main menu, first icon (Home) -> Flush all caches.

 
 

相关问题

0  在某些现有图像上更改作物焦点  ( Change crop focus for specific styles on certain existing images ) 
我刚刚迁移了15,000个故事新闻网站,并在该迁移上做了一些质量测试。 该网站使用大约5个图像样式用于各种物品,包括每个故事顶部的一个真正宽的一个(〜960x400px)。这对具有水平/横向方向的图像很棒,但导致具有垂直/纵向方向的图像的奇怪裁剪。 我不想使用像 imagefield_crop ,这将改变裁剪例如,所...

1  模块类似于模块过滤器过滤内容和用户?  ( Module similar to module filter to filter content and users ) 
我使用模块过滤器模块过滤长度的模块列表。找到一个模块而不是始终使用Ctrl + F来实现非常方便。我想知道是否有一个模块,可以过滤内容(在admin / content)和/或用户(在admin / people)中。 ...

0  元标签未出现  ( Meta tags not appearing ) 
我正在使用drupal 7,我对meta标签有奇怪的问题。对于某些内容类型,即使我输入元标题,元关键字和描述,它们不会在页面上获得有效。 其中的某些内容类型它确实反映了元信息。 如何缩小问题?我不知道如何为我的问题使用元标签快速模块,因为元信息没有生成。 如何调试问题存在于问题的位置? ...

4  如何在没有内容的情况下制作网站的克隆  ( How to make a clone of a website without contents ) 
我需要创建我一个网站的克隆。 它将是相同的(模块,视图,内容类型,模板等......) 通过应对一切,我已经完成了一次,然后删除内容和用户。 有正确的方法吗?我需要做3-4个网站副本。 是否有任何模块可以帮助我(备份和迁移的一部分)来执行这些副本?我应该创建一种"分发" 启用模块并创建内容类型,类似于Master O...

3  无法删除新分类术语的描述字段  ( Cant remove description field for new taxonomy terms ) 
我创建了一种新的分类词汇。出于某种原因,我无法为术语删除描述字段,但我只需要标题字段。 是一个错误还是不可能做的或者是隐藏在某处奇怪的设置?谢谢 ...

0  如何触发词汇术语更新功能?  ( How to trigger function on vocabulary terms update ) 
在编辑/添加/删除的分类词汇表中的任何术语时是触发的钩子? i'v试图使用hook_taxonomy_vocubulary_update但到目前为止没有成功。 ...

0  在标题中显示具有一些字符串的特定节点的块  ( Show block in particular nodes having some string in title ) 
我有一个块,我只需要在某些情况下显示这个块。 例如,如果节点的标题包括"ABC" ,则块将可见其他块。 从块的可见性设置,我使用此代码片段: <?php $match = FALSE; $url = request_uri(); if (strpos($url, "myword")) { $match = ...

8  创建图像链接的“drupal”方式是什么?  ( Whats the drupal way of creating image links ) 
我知道在drupal中创建链接的正确方法是使用 l($text, $path, array $options = array()) 。但这只允许文本链接。是否有类似的功能来创建链接的图像,或者可以单独写出html? ...

0  克服Files_Managed的255个字符URI限制  ( Overcoming 255 character uri limit for files managed ) 
我最近偶然发现了对Drupal的有趣限制。似乎在表格Files_Managed中,存在一个名为"URI" 的字段,它表示由Drupal管理的文件的路径。该字段被定义为varchar(255)。我幸福地忽略了这个事实/限制,直到我们的一个用户启动了一系列导致Drupal试图使用261个字符路径管理文件的事件,此时Dru...

1  Drupal适合那种电子商务吗?  ( Is drupal suitable for that kind of ecommerce ) 
我必须做卖网络售车的网站,我想用d7到这份工作。不幸的是,我以前从未完成任何Drupal电子商务。 我会有点用户: 老师 学生 付款方式:PayPal仅 网络研讨会内容类型: 标题 描述 开始日期(每个网络研讨会长度为60分钟) 地方 价格是所有网络研讨会的价格,由Admin 指定 网络研讨会在开始哥斯达队之前...

1  清理未使用的表  ( Clean up unused tables ) 
我已经为我的Drupal网站安装了一些分析模块。因为它是公司的内部网络,我无法使用它。现在我拥有坐在我的数据库中的模块创建的表(在我强行从Drupal安装中删除模块文件夹之后)。 有没有办法在Drupal 7中清洁未使用的表? 注意:我尝试了架构,但它似乎没有做任何事情,但是显示表在使用中且未使用 ...

0  如何以现有的自定义内容类型创建相关页面或内容类型?  ( How to create a related page or content type with in an existing custom content ) 
我已创建一个是产品页面的自定义内容类型。需要与创建软件产品页面相关的各种信息。例如,产品名称,系统要求和功能,并为我可以制作的每条软件构建自定义页面。 问题是我有一个产品页面,以及获得软件的几种方法: 潜在的试用版从我的网站上下载直接下载。 从Mac App Store购买的链接, 和从快餐商店购买它的链接。 ...

1  重写照片字段URL  ( Rewrite photo field urls ) 
每次我下载到我当地网站的Live数据库的新副本,我也必须下载照片(几个GB)。 有没有一种简单的方法来编写一个"照片" 字段(类型图像)以始终使用实时网址URL? 我正在使用s3但没有找到批量将图像和图像样式的好方法和到S3。 ...

0  节点内的多个节点  ( Multiple nodes within a node ) 
是否有没有模块out,它会提供用于在节点内显示多个节点的功能,即类似于博客如何使用其文章,只需将直接链接到其他节点的页面即可。 很大的事情是CMS部分和在节点内添加现有节点的能力。由此,我的意思是与您将与字段的方式一样,除非在这种情况下,它将是现有节点的列表。 到目前为止,我的尝试诸如设置的尝试已经使用现场集合模块...

0  规则有助于:更新现有内容后  ( Rules help after updating existing content ) 
首次使用规则进行复杂的规则。会欣赏一些帮助。在更新现有节点之后,我正在制作规则将发送电子邮件发送到预定义的电子邮件地址。此节点具有某种类型,此类型具有分类项参考字段。当这种类型的任何节点更新时,由具有某些角色的用户更新,Drupal应该发送电子邮件,并且在电子邮件中,它应该附加分类学术语的<强>名称。 tl;博士/...

2  如何基于当前登录用户的分类术语来显示节点,具有多个词汇表?  ( How to display nodes based on the taxonomy terms of the current logged in user ) 
说我有3个分类词汇表: 产品,专业和支持 每个词汇表有2个术语: 产品 - &gt; 产品1,产品2 职业 - &gt; Profession1 , Profession2 支持 - &gt; Support1 , Support2 用户可以用术语标记。用户A标记为: 产品1和支持1 ...

0  如何隐藏模块中文本字段的文本格式提示,而不是主题?  ( How to hide text format tips for text field in a module not theme ) 
我需要隐藏身体字段的文本格式提示,具体取决于用户角色,在模块中。在一些研究之后,我发现这种代码: function mymodule_form_node_form_alter(&$form, &$form_state) { if (isset($form['body'][LANGUAGE_NONE][0]['...

4  Ajax登录表单中的帖子数据无效  ( Invalid form post data in ajax login form ) 
我正在使用ajax登录表格在Drupal 7网站上工作。我有一个问题,表单工作一次,然后在注销时不起作用,然后再试一次。我需要清空缓存,再试一次,再次尝试。 我认为这是与缓存中未发现的form_id相关的东西,但我不知道如何修复它。 任何解决方案? 感谢 ...

0  更改登录块HTML为D7  ( Changing the login block html for d7 ) 
我想在登录块中更改表单元素,用于D7以将以下内容添加到输入元素: onblur="if(this.value=='') this.value='Username'" onfocus="if(this.value =='Username' ) this.value=''" 我不愿意通过钩形表单更改为此创建一个...

0  具有表单API的Managed_file字段验证错误  ( Error in validation of managed file field with form api ) 
要开始我的解决方案,但出现狂野错误:图像上传在自定义模块中 这是我的代码: function module_top_content_equipe_admin_form(){ $default = get_variable_value(variable_get('module_top_content_equi...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.