Drupal 7限制每用户发布的节点

时间:2013-03-01 19:37:35

标签: drupal limit

所以我有一个非常具体的情况,我有用户拥有由他们创作的X(无限制)节点......但他们只允许一次发布6个节点。

我用Google搜索了一段时间,找到了http://www.badzilla.co.uk/Drupal-7--Node-Limit-Publish-Module,它的工作原理很棒,但这限制了特定内容类型的已发布节点的TOTAL数量。

我需要这个确切的功能,除了基于每个用户的额外限制...这样每个用户一次只能发布6个总节点,而不是整个Drupal站点只有X总共一个特定内容类型一次发布。

希望这是有道理的...无论如何,上面的URL中的代码/模块确实非常好用,我需要提供它来检查每个用户!我不熟悉模块编码或任何东西,所以如果有人能够掌握如何改变该网站上的模块代码,那就太好了! TIA

2 个答案:

答案 0 :(得分:2)

对于遇到同一问题的任何人,需要限制特定内容类型的PUBLISHED节点数量,我的一位朋友改变了上面链接的Badzilla模块,并将其调整为以下内容。感谢Badzilla提供模块的基础,以及我的伙伴调整它以检查用户而不是站点范围的已发布节点。

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

答案 1 :(得分:0)

Node Limit就是你要追求的......

  

节点限制模块允许管理员限制角色或用户可以创建的特定类型的节点数。例如,如果站点具有可以创建“广告”节点的“广告商”角色,则节点限制管理员可以将该角色中的所有用户限制为特定数量的节点。他还可以基于每个用户限制用户。