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

时间:2010-08-20 10:02:17

标签: drupal drupal-6

我可以以某种方式在创建节点时自动将节点添加到特定节点队列吗?

(我正在使用nodequeue模块:drupal.org/project/nodequeue)

感谢

7 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:4)

规则中有“添加到节点队列”的操作。我已经通过创建一个新规则来解决。

答案 2 :(得分:3)

Drupal 6和Drupal 7都有一个为此目的而制作的简单模块:

http://drupal.org/project/auto_nodequeue

答案 3 :(得分: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);
    }
}

答案 4 :(得分:0)

您无法在管理界面中进行设置,但可以使用hook_nodeapi op insert在自定义模块中进行设置。

答案 5 :(得分:0)

有一个模块。看看它是否有帮助。 https://www.drupal.org/project/auto_nodequeue/project/auto_nodequeue

答案 6 :(得分:0)

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