检测CCK字段的值是否在编辑节点时已更改 -- entities 领域 和 6 领域 drupal 相关 的问题

Detect if the value of a cck field has changed when a node is edited


3
vote

问题

中文

drupal 6.25,cck 2.9

我有一个类型事件的节点。事件节点包含几个CCK字段,允许用户将事件提交到我们的日历,该字段进入工作流程。如果用户请求其事件支持,则IT支持人员可以通过电子邮件发送。如果他们将举办食物活动,则会通知餐饮人员。

一切都适用于,除了我们可以在稍后的请求后编辑活动。如果编辑我们制作用于通知员工的这些值之一,我需要系统自动通知那些人。

我知道如何处理通知,其他一切都运作良好,但我不知道如何检测单个字段的状态是否正在发生变化。

详细示例:

---事件信息...... ---

您是否需要在您的活动中支持?

  • 我需要我的讲座。
  • 我们将在手头上需要有人帮助软件安装。
  • 视频会议
  • 特殊要求

(多个复选框)

---更多事件信息...... ---

如果提交,批准,并稍后编辑将更改该字段的值,以便检查其中一个框,我需要处理该字段。

我有一个自定义模块来处理它,并在编写验证并提交处理,但我不确定$表单或$ form_state的值对此任务有帮助。我认为我可能会存储字段的值,因为它最初用作Hook_Form_Form_ID_ALTER的隐藏字段,然后检查隐藏的值是否针对提交的值,但很难让CCK值进入隐藏的字段,因为您必须捕获该值。在一个#After_Build功能中......我只是陷入困境,以为我会寻求帮助。

提前感谢您的时间和考虑!

编辑 - 我的解决方案基于下面的Jimajamma的建议:

  function sitecustom_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {   // If we are saving an EVENT node...   if ('presave' == $op && 'event' == $node->type) {     // If the node already exists...     if ($existing = node_load($node->nid)) {       // If the FIELD_EVENT_TECH_SUPPORT value has changed...       if ($node->field_event_tech_support == $existing->field_event_tech_support) {         // Log the change.         watchdog('event_edit', 'FIELD_EVENT_TECH_SUPPORT value did not change');       } else {         // Notify people accordingly.         // TODO: Notification of staff of changed tech support for EVENT.         // Log the notification.         watchdog('event_edit', 'Event edited with FIELD_EVENT_TECH_SUPPORT value changed. Staff notified.');       }     }   }   // Handle other nodeapi uses, validation, etc. }   

,我不确定是否正确执行 if ($existing = node_load($node->nid)) ,因为即使从头开始创建事件节点时,该块似乎也会执行。我知道我可以使用 if ($existing->created != $existing->changed) ,但我还没有想过几乎所有我想测试的等等。现在,现在,使用我上面所示的内容不会触发通知这种情况如果节点是新的。

我想我只是想在这里的解决方案中得到一些东西,以防人们将来找到这个。我将继续探索如何在时间允许的情况下使用规则和操作来探索如何更容易。

英文原文

Drupal 6.25, CCK 2.9

I have a node of type EVENT. The EVENT node contains several CCK fields that allow users to submit events to our calendar which go in to a workflow. If the user requested IT support at their event, the IT support person is e-mailed. If they will be hosting an event with food, the catering staff is notified.

Everything works great except that we can edit the event later upon their request. If the edits that we make change one of these values that is used to notify staff, I need the system to automatically notify those people.

I know how to handle notification and everything else works well, but I don't know how to detect if the state of a single field is changing.

DETAILED EXAMPLE:

--- Event information... ---

Will you require IT support at your event?

  • I need my lecture recorded.
  • We will require someone on hand to assist with software installation.
  • Video conferencing
  • Special request

(multiple checkboxes)

--- More event information ... ---

If that EVENT node is submitted, approved, and later edited to change the value of that field so that one of the boxes is checked, I need to handle that.

I have a custom module to handle this in and have experience writing validation and submit handling, but I'm not sure what values of $form or $form_state are helpful to this task. I thought that I might store the value of the field as it was originally as a hidden field with a hook_form_FORM_ID_alter and then check that hidden value against the submitted value but it's hard to get CCK values in to hidden fields because you have to capture the value in an #after_build function and... I'm just getting stuck and thought I'd ask for help.

Thanks in advance for your time and consideration!

EDIT - My solution based on the suggestion from Jimajamma below:

function sitecustom_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {   // If we are saving an EVENT node...   if ('presave' == $op && 'event' == $node->type) {     // If the node already exists...     if ($existing = node_load($node->nid)) {       // If the FIELD_EVENT_TECH_SUPPORT value has changed...       if ($node->field_event_tech_support == $existing->field_event_tech_support) {         // Log the change.         watchdog('event_edit', 'FIELD_EVENT_TECH_SUPPORT value did not change');       } else {         // Notify people accordingly.         // TODO: Notification of staff of changed tech support for EVENT.         // Log the notification.         watchdog('event_edit', 'Event edited with FIELD_EVENT_TECH_SUPPORT value changed. Staff notified.');       }     }   }   // Handle other nodeapi uses, validation, etc. } 

And I'm not exactly sure if it's correct to do if ($existing = node_load($node->nid)) because that block seems to execute even when an EVENT node is being created from scratch. I know that I could use if ($existing->created != $existing->changed) but I haven't thought through everything yet and exactly what I want to test, etc. For now, using what I've shown above won't trigger the notification in this case IF the node is new.

I guess I just wanted to get something up here in terms of a solution in case people find this in the future. I will move on to exploring how to make this easier to do/find with RULES and ACTIONS as time allows.

     
   
   

回答列表

3
 
vote
vote
最佳答案
 

我还没有这样做,但我的第一个想法是在Nodeapi()中这样做,并沿着(这个伪伪代码)的线条做某事:

  if ( $op == 'presave' and $node->type == 'event' ) :    $existing = node_load($node->nid);    if ( $existing ) :        check your fields in $node against the $existing node        if they are different do something   

并考虑到您可能不再需要它或餐饮,以便需要传达,以及您需要的情况下。

 

I haven't done this, but my first idea would be to do this in nodeapi() and do something along the lines of (this horrid pseudo code):

if ( $op == 'presave' and $node->type == 'event' ) :    $existing = node_load($node->nid);    if ( $existing ) :        check your fields in $node against the $existing node        if they are different do something 

and take into account you may no longer need IT or catering, so that needs to be conveyed as well as if you need it afterall.

 
 
 
 

相关问题

2  最合适的方式实现复杂配置数据?  ( Most appropriate way to implement complex configuration data ) 
我需要创建一个admin for content,它使一系列嵌套引用对我们单独的数据API。当创建新的内容项时,用户从(大)列表中选择一个或多个数据源。然后他们创建一个或多个对这些所选源的引用的列表。对于每个参考,他们从可用于该源的项目列表中选择。对于每个 datasource-item的每个,它们输入了一些文本字段...

2  在将其输出在模板文件中时如何替换URL字段中的字符串  ( How to replace a string in a url field when outputting it in a template file ) 
我为URL创建了一个新字段。在将字段输出到字段时替换URL中某些字符串的最佳方法是什么 - Field_URL.TPL.php文件? 例如,在 http://example.com/master/m/ 我需要删除"http://" 部分,并将 Master 替换为从属。 是一个字段;没有 foreach() 循环。...

0  在插入中使用CSS类的多个选择  ( Use multiple choices of css class in insert ) 
如果使用插入模块,在字段编辑中,我们可以将额外的CSS类放入插入的图像中。 我需要图像浮动。因此,我在字段编辑中键入 floatrimg ,以及css中的 .floatrimg {float:right;margin:0 0 10px 10px;} 。它可以很好。 但如果我需要在一个帖子中有2个图像:一个图像浮动右,...

1  从商务结账期间从用户实体填充字段  ( Populating fields from the user entity during a commerce checkout ) 
当用户结账时,他们需要填写应保存到用户实体的一些特定信息。 因此,我需要修改签出表单以收集我想要的信息,然后将其保存到用户。 似乎是一种简化过程的厚颜无耻的方法将直接将用户字段连接到商务订单实体。这是可能的,还是应该只加载用户实体表单并复制我想要的字段我想要的字段? ...

2  如何将自定义节点字段添加到页面标题中?  ( How to add custom node field into page title ) 
我有一个自定义节点字段,我要添加到页面标题中。我该怎么办? 内容类型是属性清单,我希望具有标题旁边打印的区域大小和位置。 e.g。大型豪宅900平方英尺(芝加哥) 位置也是下拉列表中的分类学期。 我是否需要预处理函数来提取字段,然后使用page.tpl.php? ...

0  视图:显示字段A或Field B  ( Views show either field a or field b ) 
我正试图找到一种方法来显示字段_或field_b。 例如,我必须在完整节点显示上呈现不同的图像字段,这两个都是可选的。现在我希望能够在我的列表视图中显示其中一个图片,或者,如果这不存在,则为图片2,但从来没有两个。 是否有更智能的方式来实现这一点,而不是将逻辑放入视图字段模板? ...

3  如何按字段联系节点,不是标题?  ( How to relate nodes by field not title ) 
我正在使用 feeds 从XML导入内容。内容是电影及其展示,如下所示: <film id=av1> <title>Avatar</title> <showtimes total="2"> <showtime show_id="1" id="av1" date="1/1/2012" price="...

5  术语参考字段:添加新文本域的复选框  ( Term reference field checkboxes with add new textfield ) 
我需要更改术语参考字段的呈现。 Drupal 7有3个小部件类型: 选择列表 复选框/单选按钮 自动完成术语小部件 我需要在添加节点时显示复选框以选择1或多个术语,但我还需要显示一个文本域以允许添加新术语。 自动完成术语窗口小部件允许选择现有术语并添加新的术语,这是我需要的功能,但我完全需要的是包含现有术语和下面...

0  在admin中显示自定义注释字段  ( Display custom comment field in admin ) 
我为特定内容类型创建了一些自定义字段。 一个字段例如是电子邮件字段,它用于联系帖子赢得比赛后。 但是当我查看admin中的注释时,没有选项可查看这些自定义字段。 有没有办法改变这个? 所以我想为admin叠加添加自定义字段以获取评论 ...

52  使用语言时最好的练习[und]?  ( Whats best practice when working with the languageund ) 
我开始使用此表单来访问我的模块中的数据。 (见评论#1 $node->field_test[$node->language][0]['value'] 我认为这看起来像一个非常好的解决方案,但进一步下来我发现了我找到了这个:< / p> 不要假设'und'是针对没有语言的实体字段,它也是不可翻译的字段,没...

4  使用实体参考+视图创建成员选择列表  ( Using entity reference views to create members select list ) 
如何使用视图+实体引用获取特定于当前组的活动成员列表[通过有机组创建]。 我已创建一个列出属于组的活动成员的视图。 我已经看过用视图限制可选实体 但是我的问题是,这也可能是实体参考? 如果是,我如何实现这种情况? ...

1  从实体获取计算字段的分类名称  ( Getting taxonomy name from entity for computed fields ) 
im尝试使用computed_field模块创建计算值字段。我试图做一些像 http://drupal.org/node/792922 ,但该示例是用于drupal 6.有人可以指出我如何用Drupal 7做到这一点的正确方向? ...

0  使用任意格式化程序渲染视图主题TPL中的多值字段  ( Rendering multiple value field in views theme tpl using arbitrary formatter ) 
我需要将一个文件字段的项目与其他文件字段合并到一个列表中,如中 <li> Field A File </li> <li> Field B File </li> <li> Field C0 File </li> <li> Field C1 File </li> <li> Field C2 File </l...

1  如何使用视图来制作使用块类型创建的内容的幻灯片  ( How to use views to make slideshow of the content created using block type ) 
进一步解释: 请直接从块创建块内容类型,例如使用添加块然后发布的Item_1。我做了相同的3Twice(item_2,item_3),每个都携带其内容(body)。所有发布。 现在我想通过幻灯片方法使用视图来查看此块类型。这可能是可能的吗? 所有我在筛选器列表中看到的views 3版本是所有节点,内容类型都没有指向此...

0  Drupal 6内容类型字段未保存  ( Drupal 6 content types fields not saving ) 
我正在使用drupal 6,我对它有点新。 我已经跑进了一个奇怪的行为。 我创建了一个新的内容类型,有4个新字段,当我尝试使用此内容进行新内容时,只保存所有内容,除了新字段。 每次我保存内容新字段为空。 我一直在没有运气的搜索引擎,是一种已知的行为,是一个错误,或者是一个不可能的东西吗? 我应该如何检查这种情况? 所...

0  过滤基于视图中的内容类型的字段(Drupal 7)  ( Filter a field based on the content type in a viewdrupal 7 ) 
我需要为特定内容类型删除视图(块)的字段。 我有两种不同的内容类型。一条文章,另一个是外部新闻。 以下是图中添加的字段。 Field: Content: Title Content: Post date Content: External URl Content:...

3  在保留输入的数据时,将重定向注册匿名用户  ( Form redirection to registration for anonymous users while preserving data enter ) 
如何在前面页面上具有CCK形式,而且一旦用户单击"保存" ,请检查用户是否已登录,如果没有,则重定向到创建帐户,但通过保留在CCK表单中输入的数据以避免它们重新输入每个字段? 我已经检查了网上,但到目前为止,没有什么似乎这样做... 感谢任何帮助: - ) ...

2  是否可以在我的主题目录中使用图像作为图像字段的默认图像?  ( Is it possible to use an image in my themes directory as the default image of an ) 
这个问题地址如何使用URL添加图像而不是使用 filefield添加图像来源模块。但是,该模块不允许设置"默认图像" 。 对于我的图像字段,我希望用户只能上载文件(默认情况下,默认情况下)。但是,如果可能,我希望将默认图像存储在我的主题目录中,以便在多个站点跨部署。有没有办法将默认图像设置为服务器上的图像而不是必须...

21  正在以自己的可能性显示工作字段小部件表单?  ( Is displaying a working field widget form on its own possible ) 
我有兴趣将字段窗口小部件嵌入到整个节点编辑表单的上下文中。 我在过去使用 drupal_get_form ,但似乎申请孤独的字段形式。 正在显示一个可能的字段小部件形式吗?什么是最好的方法? 两个字段窗口小部件和"普通" 形式似乎非常相似,因此如果是不可能的,则需要将窗口小部件形成为正常形式? 这个问题似乎要要求...

0  在Drupal 7中的内容类型是否存在预先填充的身体也会影响性能?  ( Does pre populated body for content types in drupal 7 affect performance too ) 
从这篇文章的最高评分答案(Drupal 6案例): 具有太多内容类型对网站速度和性能产生负面影响? 据说: 内容类型中的共享字段确实会影响性能。 但在Drupal 7中创建新内容类型时,将预先填充Body字段。当创建的许多内容类型(如果未删除)时,此字段将在所有内容类型之间共享。 这是 admin/report...




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


Licensed under cc by-sa 3.0 with attribution required.