【问题标题】:Drupal form with custom ID具有自定义 ID 的 Drupal 表单
【发布时间】:2011-02-19 08:25:00
【问题描述】:

如果我错了,请纠正我,在阅读了drupal fapi相关文章后,我得到的印象是fapi自己生成'id'属性。它只允许开发人员分配“名称”属性。如果是这种情况,有没有办法可以为元素设置欲望“id”值?因为,我希望我的元素具有有意义的“id”,以便 html/jquery 代码更易于阅读,并节省我通过已经编写的 jquery 代码更改我在里面使用的所有“id”的时间。

P.S:drupal 版本 - 6.x

【问题讨论】:

    标签: drupal forms element drupal-fapi


    【解决方案1】:

    好的,找到了解决方案。我可以使用$form 元素的#attributes 键来设置任何附加属性(例如类、id 等)。感谢您迄今为止的帮助。

    【讨论】:

      【解决方案2】:

      我有一个类似的问题要处理。我需要在同一页面上有多个表单,因此我必须更改表单及其元素的 id 以防止重复的 id。我做了类似以下的事情:

      function voci_comment_form($form, &$form_state, $cid) {
        $form['#attributes']['id'] = 'voci-comment-form-' . $cid;
        $form['#attributes']['class'][] = 'voci-comment-form';
        $form['body'] = array(
          '#title' => 'Post a comment',
          '#type' => 'textarea',
          '#resizable' => FALSE,
          '#rows' => 1,
        );
        $form['comment'] = array(
          '#type' => 'submit',
          '#value' => 'Comment',
        );
      
        foreach ($form as $k => &$element) {
          $k = str_replace('_', '-', $k);
          $element['#attributes']['id'] = "edit-$k-$cid";
          $element['#attributes']['class'][] = "edit-$k";
        }
      
        return $form;
      }
      

      这基本上根据传入的 $cid 设置唯一 id。代码还为表单中的每个元素添加类,以便您轻松设置样式。我确信一个更强大的解决方案是可能的,但这是基本思想。在 Drupal 7 中测试。

      【讨论】:

        【解决方案3】:

        确实可以设置$element['#attributes']['id'],这将应用于表单字段。但是,它会破坏 Drupal 7 中的标签和 #states,因为渲染管道的其余部分从其他地方读取 ID。因此,为了让您的标签和 #states 继续工作,请改用将 ID 设置为 $element['#id'](一个未记录的属性,但它是表单 API 在内部监视 ID 的方式)。

        确保通过drupal_html_id 传递您的 ID,以确保没有冲突。

        【讨论】:

          【解决方案4】:

          这个问题实际上与 Drupal-FAPI 本身并没有太大关系,而更多的是与 Drupal 主题形式(创建标记)的方式有关。

          • 如果您想更改网站上的所有表单,您可以覆盖用于表单和不同类型表单字段的主题功能。

          • 如果你只是想覆盖一些表单或表单域,你可以在表单或元素上设置#theme属性,来改变应该使用哪个函数来创建标记。

          【讨论】:

          • 这是否意味着我可以设置自己的 Id 属性来形成主题函数中的元素?如果是这样,我该如何引用元素的 ID 属性?我想我在这里有点迷路了。非常感谢。
          • 好的,找到了解决方案。我可以使用表单元素的属性键来设置任何其他属性(例如类,id ..)。感谢您迄今为止的帮助。
          猜你喜欢
          • 1970-01-01
          • 2020-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-03
          • 2017-10-10
          • 1970-01-01
          相关资源
          最近更新 更多