1

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

我用谷歌搜索了一段时间,发现http://www.badzilla.co.uk/Drupal-7--Node-Limit-Publish-Module效果很好,除了这限制了特定内容的已发布节点的总数类型。

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

希望这是有道理的......无论如何,上面 URL 中的代码/模块确实运行良好,只是我需要满足它以针对每个用户进行检查!我对模块编码或任何东西都不是很好,所以如果有人能够掌握一点如何更改该站点上的模块代码,那就太好了!TIA

4

2 回答 2

2

对于遇到我同样问题的任何人,需要限制特定内容类型的已发布节点的数量,我的一个朋友更改了上面链接的 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');
        }
    }
}
于 2013-03-04T15:46:56.750 回答
0

节点限制是您所追求的...

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

于 2013-03-01T20:22:35.573 回答