Лучший подход для ограничения пользователей одним узлом данного типа контента в Drupal - PullRequest
2 голосов
/ 03 мая 2010

Мне нужно ограничить пользователей одним узлом данного типа контента. Таким образом, пользователь может создать только один узел TypeX. Я придумал два подхода. Что было бы лучше использовать ...

1) Отредактируйте элемент меню node / add / typex, чтобы проверить базу данных, чтобы увидеть, создал ли пользователь узел TypeX, а также есть ли у него разрешения на его создание.

2) Когда пользователь создает узел TypeX, назначьте ему другую роль, у которой нет прав на создание этого типа узла.

В подходе 1 я должен сделать дополнительный вызов базы данных при каждой загрузке страницы, чтобы увидеть, должны ли они видеть «Создать TypeX» (узел / добавить / типx). Но в подходе 2 я должен поддерживать две отдельные роли.

Какой подход вы бы использовали?

Ответы [ 2 ]

4 голосов
/ 03 мая 2010

http://drupal.org/project/node_limit

ОБНОВЛЕНИЕ: это даже лучше, обновлено неделю назад, первое не обновляется через год

http://drupal.org/project/node_limitnumber

0 голосов
/ 12 октября 2016

Если хотите, вы можете изучить код модуля OnlyOne (песочница), чтобы увидеть простой способ сделать это.

Модуль 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 .

...