2013-03-01 3 views
1

J'ai donc une situation assez spécifique où j'ai des utilisateurs qui ont créé des nœuds X (illimités) ... mais ils ne peuvent avoir que 6 nœuds Publié à la fois.Drupal 7 Limite des nœuds publiés par utilisateur

J'ai parcouru pendant un moment et trouvé http://www.badzilla.co.uk/Drupal-7--Node-Limit-Publish-Module, ce qui fonctionne GREAT, sauf que cela limite le nombre total de nœuds publiés d'un type de contenu particulier. J'ai besoin de cette fonctionnalité exacte, sauf w/la limitation supplémentaire sur une base par utilisateur ... Ainsi que chaque utilisateur ne peut avoir 6 nœuds au total Publié en même temps, plutôt que l'ensemble du site Drupal ayant seulement X au total un type de contenu particulier publié à la fois.

Heureusement que cela a du sens ... quel que soit le code/module de l'URL ci-dessus fonctionne très bien, j'ai juste besoin de le faire pour vérifier par utilisateur! Je ne suis pas génial avec le codage de module ou quoi que ce soit, donc si quelqu'un est capable de se pencher un peu sur la façon de modifier le code du module sur ce site, ce serait génial! TIA

+0

mon premier instinct est de faire une règle qui vérifie la publication sur ce contrôle le nombre de nœuds ont cet utilisateur comme auteur ... assez nouveau pour drupal, bien que – Ken

Répondre

0

Node Limit est celui que vous êtes après ...

Le module limite Node permet aux administrateurs de limiter le nombre de noeuds d'un type spécifique que les rôles ou les utilisateurs peuvent créer. Par exemple, si un site a un rôle "Annonceur" qui peut créer des nœuds "de publication", l'administrateur de limite de nœud peut limiter tous les utilisateurs de ce rôle à un nombre spécifique de nœuds. Il peut également restreindre les utilisateurs par utilisateur.

+0

limite Node est pas tout à fait ce que je cherchais, j'étais essayer d'être assez spécifique dans ma description que j'en avais besoin pour limiter les nœuds PUBLIÉS, pas les nœuds CREATED/EXISTING. Le module "Node Limit" ne vérifie que la création de nœuds, je ne veux pas limiter la création de nœuds. – savingstrangers

2

Pour toute personne qui court dans ma même question, d'avoir besoin de limiter le nombre de nœuds PUBLIÉ d'un type de contenu particulier, un de mes amis modifié le module Badzilla lié ci-dessus, et pincé pour être le suivant. Merci à Badzilla pour avoir fourni la base du module, et mon pote pour l'avoir ajusté pour vérifier sur un utilisateur plutôt que sur le nombre de nœuds publiés sur le site.

<?php 

/* 
* File   : node_limit_publish.module 
* Title  : Limits the number of concurrently published node types dependent upon admin configurable limits 
* Sponsor  : Hangar Seven Digital 
* Author  : Badzilla www.badzilla.co.uk @badzillacouk 
* 
* This work is copyright Badzilla under the GPL licence terms and conditions 
* 
*/ 






/** 
* Implementation of hook_menu(). 
* 
*/ 
function node_limit_publish_menu() { 

    $items = array(); 

    $items['admin/config/content/node_limit_publish'] = array(
     'title' => 'Limit Number of Published Nodes per Node Type', 
     'description' => t('Zero represents an unlimited amount of published nodes'), 
     'page callback' => 'drupal_get_form', 
     'page arguments' => array('node_limit_publish_admin_settings'), 
     'access arguments' => array('administer node_limit_publish'), 
     'type' => MENU_NORMAL_ITEM, 
    ); 

    return $items; 
} 






function node_limit_publish_admin_settings() { 

    $form = array(); 

    if (is_array($types = node_type_get_types())) { 

     $form['title'] = array(
      '#markup' => t('Zero represents an unlimited amount of published nodes'), 
     ); 

     foreach($types as $key => $value) 
      $form['node_limit_publish_'.$key] = array(
       '#type' => 'textfield', 
       '#description' => $key, 
       '#size' => 4, 
       '#maxlength' => 10, 
       '#element_validate' => array('node_limit_publish_is_numeric'), 
       '#default_value' => variable_get('node_limit_publish_'.$key, 0),     
      ); 
    } 

    return system_settings_form($form); 
} 




function node_limit_publish_is_numeric($element, &$form_state, $form) { 

    if (!is_numeric($element['#value'])) 
     form_error($element, t('This field must be numeric')); 
} 





/** 
* Implementation of hook_presave(). 
* 
*/ 
function node_limit_publish_node_presave($node) { 
    global $user; 

    // Get the limit on this type 
    if (($limit = variable_get('node_limit_publish_'.$node->type, 0)) and $node->status == 1) { 
     // now check whether we have reached our maximum 
     $query = db_select('node') 
      ->condition('type', $node->type) 
      ->condition('status', 1) 
         ->condition('uid', $user->uid); 
     if (isset($node->nid)) 
      $query->condition('nid', $node->nid, '!='); 
     $count = $query->countQuery() 
      ->execute() 
      ->fetchField(); 
     if ($count >= $limit) { 
      $node->status = 0; 
      // use %type for dynamic node type 
      drupal_set_message(t('Sorry, the maximum of this node are active already. You must first disable another!', array('%type' => $node->type)), 'warning'); 
     } 
    } 
} 
Questions connexes