【问题标题】:How to make file attachment required for a content type in Drupal如何在 Drupal 中制作内容类型所需的文件附件
【发布时间】:2011-09-21 06:34:18
【问题描述】:

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

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;
        }
      }

【问题讨论】:

    标签: drupal hook-form-alter


    【解决方案1】:

    我发现使用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;
      }
    }
    

    【讨论】:

    • 这看起来像是附件的默认设置,但我只想为特定的内容类型设置它,在我的情况下它是“媒体内容”,更多我正在更改我的问题以显示我是怎么做到的。
    • 我已经用开关/案例更新了代码,因此您可以将这些表单更改限制为特定的节点内容类型。
    【解决方案2】:

    是的,这是可能的。

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

    希望这会有所帮助!

    【讨论】:

    • 赞赏,但如果我使用具有 ajax 上传功能的默认文件附件方法,那么我如何知道确切的字段名称。
    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 2023-03-27
    • 2014-11-14
    • 2013-02-08
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2019-10-21
    相关资源
    最近更新 更多