1

我想将文件附件选项作为特定内容类型的必填字段,用户无法提交没有附件的节点表单。
我这样做的方式不起作用,如果我做错了,请指导我。

function ims_form_alter(&$form, &$form_state, $form_id) {


    switch ($form_id) {

     case 'media_content_node_form':
          unset($form['buttons']['preview']);
          if(is_numeric(trim(arg(3))))
            {
              $arg_nid = arg(3);
              $form['field_media_model']['#default_value'][0]['nid'] = $arg_nid;
            }

            switch($form['#id'])
            {
              case "node-form":
              $form['attachments']['#required'] = true;
              break;
            }

          break;
        }
      }
4

2 回答 2

2

是的,有可能。

  1. 检查表单 ID。通常,您可以通过检查表单并获取 id 来获取名称。将“-”替换为“_”。这将为您提供表单的表单 ID。
  2. 如果表单 id == 进行条件检查。使用krumo($form)(在此步骤之前启用开发模块)。
  3. krumo()给你所有字段名称的列表。现在,$form[<field_name>]['#required'] = 1;

希望这可以帮助!!

于 2011-09-21T08:27:03.527 回答
2

我发现使用FileField而不是 Drupal 的核心上传模块时,在 Drupal 中的生活更轻松。使用 FileField,您可以在您的内容类型上创建一个 CCK 字段 (FileField),并像任何其他 CCK 字段一样使该字段成为必填字段。这种方法不需要编写一行代码。

但是,如果您必须使用 Drupal 的核心上传模块,那么您可以使用 hook_form_alter 来完成此操作,例如:

function my_module_form_alter(&$form, &$form_state, $form_id) {
  switch ($form['#id']) {
    case "node-form":
      switch ($form['type']['#value']) {
        case "my_node_type":
          $form['attachments']['#required'] = true;
          break;
      }
    break;
  }
}
于 2011-09-21T15:29:53.133 回答