Drupal: автоматически добавлять новые узлы в очередь узлов - PullRequest
3 голосов
/ 20 августа 2010

Могу ли я как-то автоматически добавить узел к определенной очереди узлов при ее создании?

(я использую модуль nodequeue: drupal.org/project/nodequeue)

спасибо

Ответы [ 7 ]

9 голосов
/ 07 мая 2012

Мне понадобилась эта функция для сайта drupal 7, и я выбрал решение для пользовательского модуля.Допустим, установка представляет собой одну очередь узлов, и каждый узел «проекта» должен автоматически добавляться и удаляться в очередь.Создайте пустой каталог nodequeue_auto_add в sites / all / modules /.Содержит эти два файла

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 голосов
/ 21 августа 2010

В Правилах есть действие «Добавить в Nodequeue».Я решил, создав новое правило.

3 голосов
/ 20 ноября 2012

Для этой цели создан простой модуль как для Drupal 6, так и для Drupal 7:

http://drupal.org/project/auto_nodequeue

2 голосов
/ 11 ноября 2010

Я использую 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 голосов
/ 14 апреля 2016

Хотя этот модуль не совсем соответствует запросу OP «автоматическое добавление», он позволяет вам настроить тип содержимого, чтобы вы могли добавить его непосредственно в очередь: https://www.drupal.org/sandbox/rlhawk/1444496 Это песочница, но очень стабильная и я использую это все время и люблю это.

0 голосов
/ 13 апреля 2016

Для этого есть модуль. Проверьте это и посмотрите, поможет ли это. https://www.drupal.org/project/auto_nodequeue/project/auto_nodequeue

0 голосов
/ 20 августа 2010

Вы не можете настроить его в интерфейсе администратора, но вы можете сделать это в пользовательском модуле, используя hook_nodeapi op insert.

...