Drupal:自动将新节点添加到节点队列

3
当创建一个节点时,我是否可以自动将其添加到特定的节点队列中?(我正在使用Nodequeue模块:drupal.org/project/nodequeue)谢谢。
7个回答

9

我需要将这个功能应用于 Drupal 7 网站,并使用自定义模块的解决方案。假设设置为一个节点队列,每个“项目”节点都应自动添加到队列中并从队列中删除。在 sites/all/modules/ 中创建一个空的 nodequeue_auto_add 目录。其中包含以下两个文件:

nodequeue_auto_add.info

name = Nodequeue auto add/remove
description = Automatically adds and remove nodes when they are created and deleted.
core = 7.x
version = 7.x-dev
package = Nodequeue

dependencies[] = nodequeue

nodequeue_auto_add.module

<?php
/**
 * Implements hook_node_insert().
 */
function nodequeue_auto_add_node_insert($node) {
  $nid = $node->nid;
  $type = $node->type;
  // only process project node
  if ($type != 'project') {
    return FALSE;
  }
  // I've only one nodequeue where a specific node type should always be 
  // added so this is taken from the mysql nodequeue_queue table
  $queue_id = 1;

  // subqueue id, exists even if we created a really basic nodequeue (from nodequeue_subqueue table)
  $sqid = 1;
  $queue = nodequeue_load($queue_id);
  $subqueue = nodequeue_load_subqueue($sqid);

  if (function_exists('views_invalidate_cache')) {
    views_invalidate_cache();
  }

  nodequeue_subqueue_add($queue, $subqueue, $nid);
}

/**
 * Implements hook_node_delete().
 */
function nodequeue_auto_add_node_delete($node) {
  $nid = $node->nid;
  $type = $node->type;
  // only process project node
  if ($type != 'project') {
    return FALSE;
  }

  if (function_exists('views_invalidate_cache')) {
    views_invalidate_cache();
  }

  // I've only one nodequeue where a specific node type should always be 
  // added so this is taken from the mysql nodequeue_queue table
  $queue_id = 1;

  // subqueue id, exists even if we created a really basic nodequeue (from nodequeue_subqueue table)
  $sqid = 1;

  nodequeue_subqueue_remove_node($sqid, $nid);
}

4
在规则中有一个名为“添加到节点队列”的操作。我通过创建新规则来解决了这个问题。

1
截至今天,Nodequeue 7.x-2.x分支仍在进行中(不确定7.x-3.x):规则集成 - thirdender
我在规则动作中找不到添加到节点队列的选项。 - Fahad Ur Rehman

3

1
截至Nodequeue 7.x-3.x,此功能无法正常工作。我认为这与问题Drop all use of $qid有关。尝试保存auto_nodequeue的设置会导致undefined index $qid错误。 - thirdender

2

我正在使用没有规则的Drupal 5。以下是我完成它的方法,我不使用任何子队列:

if($op == 'insert'){
    if($node->type == 'node_type'){
        $queue = nodequeue_load(4);
        $subqueue = nodequeue_load_subqueue(4);
        nodequeue_subqueue_add($queue, $subqueue, $node->nid);
    }
}

0

你无法在管理界面中设置它,但是你可以在自定义模块中使用hook_nodeapi操作insert来完成。


我已经通过创建一个新规则来解决了这个问题,但是当节点从队列中删除时,我还应该将其删除.. 但是没有条件触发器可以实现这一点.. - aneuryzm

0

0

虽然这个模块不完全满足 OP 的 "自动添加" 请求,但它允许您配置内容类型,以便您可以直接将其添加到队列中:https://www.drupal.org/sandbox/rlhawk/1444496 它是一个沙盒,但非常稳定,我一直在使用并且喜欢它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接