2010-05-03 4 views
2

Je dois limiter les utilisateurs à un seul nœud d'un type de contenu donné. Un utilisateur ne peut donc créer qu'un seul noeud de TypeX. J'ai trouvé deux approches. Ce qui serait préférable d'utiliser ...Meilleure approche pour limiter les utilisateurs à un seul nœud d'un type de contenu donné dans Drupal

1) Modifier l'élément de menu node/add/typex pour vérifier la base de données pour voir si l'utilisateur a déjà créé un nœud de TypeX, ainsi que s'ils ont des autorisations pour créer il.

2) Lorsqu'un utilisateur crée un noeud de TypeX, assignez-lui un rôle différent qui n'a pas les permissions pour créer ce type de noeud.

Dans l'approche 1, je dois faire un appel de base de données supplémentaire sur chaque chargement de page pour voir s'ils devraient être en mesure de voir le "Create TypeX" (noeud/ajouter/typex). Mais dans l'approche 2, je dois maintenir deux rôles distincts.

Quelle approche utiliseriez-vous?

Répondre

4

http://drupal.org/project/node_limit

MISE À JOUR: ce qui est encore mieux, il y a une semaine mise à jour, premier est pas mis à jour en un an

http://drupal.org/project/node_limitnumber

+0

je menan approche 1) pourrait être mieux si vous avez un site giga où l'optimisation hardcore est nécessaire – henrijs

+0

wow, je pensais que j'avais regardé à fond les modules contrib ... suppose pas. merci pour les liens. Je vais accepter la réponse si l'on travaille pour moi – Chaulky

+0

a fini par qu'un autre développeur ait déjà une approche de changement de rôle qui fonctionne, donc nous n'allons pas jouer avec ça. Mais j'apprécie les liens et je trouverai probablement besoin d'un de ces modules à l'avenir – Chaulky

0

Si vous voulez, vous pouvez étudier le code du module OnlyOne (sandbox) pour voir un moyen simple d'accomplir cela.

Le module Un seul permet la création d'un seul nœud par langue dans les types de contenu sélectionnés pour cette configuration.

/** 
* 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'); 
     } 
    } 
    } 
} 

Divulgation: Je suis le responsable du module OnlyOne.

Questions connexes