2

間違っていたら訂正してください。drupal の fapi 関連の記事を読んだ後、fapi はそれ自体で 'id' 属性を生成するという印象を受けました。開発者は「名前」属性のみを割り当てることができます。その場合、要素に希望の 'id' 値を設定する方法はありますか? 要素に意味のある「id」を持たせて、html/jquery コードを読みやすくするだけでなく、既に作成された jquery コードを調べて、内部で使用したすべての「id」を変更する時間を節約したいからです。

PS:drupal バージョン - 6.x

4

4 に答える 4

2

わかりました。解決策が見つかりました。#attributes要素のキーを使用して、$form追加の属性 (class、id など) を設定できます。これまでお世話になりました。

于 2010-05-14T13:20:58.933 に答える
1

同様の問題に対処する必要がありました。同じページに複数のフォームを配置する必要があったため、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 でテスト済み。

于 2011-02-10T05:11:48.953 に答える
1

$element['#attributes']['id']設定でき、それがフォーム フィールドに適用されるのは事実です。#statesただし、 Drupal 7 では、残りのレンダリング パイプラインが ID を別の場所から読み取るため、ラベルが破損します。そのため、ラベルと#states作業を継続するには、代わりに set the ID to を使用します$element['#id'](ドキュメント化されていないプロパティですが、フォーム API が内部で ID を監視する方法です)。

drupal_html_id競合がないように、必ず ID も渡してください。

于 2013-12-04T17:05:22.147 に答える
0

この問題は、Drupal-FAPI自体とはあまり関係がありませんが、Drupalテーマの形成(マークアップの作成)とは関係があります。

  • サイト上のすべてのフォームを変更する場合は、フォームおよびさまざまなタイプのフォームフィールドに使用されるテーマ機能を上書きできます。

  • 一部のフォームまたはフォームフィールドを上書きするだけの場合は#theme、フォームまたは要素に属性を設定して、マークアップの作成に使用する関数を変更できます。

于 2010-05-14T06:45:02.300 に答える