更改字段的每个角色的值数

时间:2011-04-18 10:23:52

标签: drupal drupal-6

我想知道如何限制照片在用户图库类型中的值数量。

我想为基本用户提供最多10张照片,为vip用户提供30张照片。

有没有机会通过drupal选项制作它,或者我应该重写一些javascript?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这继续Jame建议使用hook_form_alter()。我之前需要这样的解决方案,所以我开始试一试。这尚未经过全面测试,但它可以帮助您控制要显示的上载字段数。我正在使用它,图像字段限制设置为10,在D6和CCK上。

但问题是,CCK最多会显示10个上传字段,但是当您将其设置为无限时,它会显示1个字段,然后使用“添加另一个”按钮。所以,如果你使用10,那么你可以限制在下面,但如果你想从30到10,你需要一个不同的解决方案。

对不起,这不是一个确切的解决方案,但它可能会让你更近一点。此代码以编程方式将图像字段限制为10,最小为4。

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'mycontenttype_node_form') {

    // run some logic to figure out how many uploads, and set it here
    $number_of_uploads = 4;

    // not sure if this does anything, but it is the part of the field that
    // references the upload limit. it does not automatically add or remove
    // fields though
    $form['#field_info']['field_myimagefield']['multiple'] = $number_of_uploads;

    // just an increment var
    $i = 1;

    // we have to unset the fields from here
    foreach ($form['field_myimagefield'] as $key => $value) {
      // check for is_numeric because some are property keys starting with #
      if (is_numeric($key)) {
        if ($i > $number_of_uploads) {
          unset($form['field_myimagefield'][$key]);
        }

        $i++;
      }
    }
  }
}

如果你走这条路,请告诉我们。我现在没有时间进行全面测试。

答案 1 :(得分:0)

这样做的最简单方法是创建两种不同的图库内容类型,允许基本用户允许10张照片的类型,以及vip用户允许30种类型的类型。

然而,每当一个人“升级”时,这就会产生问题。然后他们可以创建一个新的画廊,但他们需要重新上传所有30张照片。

如果网站数量不大,您只需告知用户您将手动移动他们的照片。

当然,这对你来说有很多工作要做,但如果你还没有准备好沿着这条路走下去,那么它将不必你创建一个小的自定义模块(虽然如果你知道php,它比它可能听起来。)

另一种选择是使用Drupal的hook_form_alter()hook_nodeapi()的组合 - 假设您正在使用CCK,或者您正在使用的任何图库模块都包含所有上传字段一个表单 - hook_form_alter()会检查您的用户的角色,如果他们不在vip角色,则将表单从30张照片修改为10张;和hook_nodeapi(),在检查了图库节点所有者的角色ID后,只会显示前10张照片,而不会显示30张照片。从长远来看,这样可以省去很多时间,但需要创建一点为此目的的模块。

如果并非所有上传字段都采用一种形式,您可以随时查看用户已根据其角色上传了多少图像,然后有条件地显示添加新图像的控件。根据不同的情况,有很多方法可以做到这一点......它可以像将角色名称添加到你的身体类一样简单,然后使用css来摆脱不需要的元素(如果你不太挑剔的话)关于人们“黑客入侵”HTML以添加他们的图像,这很可能很少发生 - 或者编辑你正在使用的模块的模板代码。