在Drupal中将用户限制为给定内容类型的单个节点的最佳方法

时间:2010-05-03 05:57:21

标签: drupal drupal-6 roles limit

我需要将用户限制为给定内容类型的单个节点。因此,用户只能创建一个TypeX节点。我想出了两种方法。哪个更好用...

1)编辑node / add / typex菜单项以检查数据库以查看用户是否已经创建了TypeX节点,以及他们是否有权创建它。

2)当用户创建TypeX节点时,将它们分配给不具有创建该类节点的权限的其他角色。

在方法1中,我必须在每个页面加载时进行额外的数据库调用,以查看它们是否应该能够看到“Create TypeX”(node / add / typex)。但是在方法2中,我必须保持两个不同的角色。

您会使用哪种方法?

2 个答案:

答案 0 :(得分:4)

http://drupal.org/project/node_limit

更新:这更好,一周前更新,第一个没有在一年更新

http://drupal.org/project/node_limitnumber

答案 1 :(得分:0)

如果您愿意,可以学习OnlyOne模块(沙箱)的代码,以查看实现此目的的简单方法。

  

Only One模块允许为每种语言创建Only One节点   在此配置的选定内容类型中。

/**
 * Implements hook_form_alter().
 * @param $form
 * @param $form_state
 * @param $form_id
 */
function onlyone_form_alter(&$form, &$form_state, $form_id) {
  $onlyone_content_types = variable_get('onlyone_node_types');
  //getting the name of the node type
  $node_type = substr($form_id, 0, -10);

  //Verifying if the new node should by onlyone
  if (isset($onlyone_content_types) && in_array($node_type, $onlyone_content_types, TRUE)) {
    $node = $form_state['node'];
    //if we are trying to create a new node
    if (!isset($node->nid) || isset($node->is_new)) {
      $query = new EntityFieldQuery();
      $query->entityCondition('entity_type', 'node')
        ->entityCondition('bundle', $node_type);

      if (drupal_multilingual()) {
        global $language;
        $query->propertyCondition('language', $language->language);
      }

      $result = $query->execute();
      //if we have one node, then redirect to the edit page
      if (isset($result['node'])) {
        $nid = array_keys($result['node'])[0];
        drupal_goto('node/' . $nid . '/edit');
      }
    }
  }
}

披露:我是模块OnlyOne的维护者。