it-swarm-id.com

Elemen bentuk "#markup" tidak dapat memiliki anak

Saya memiliki formulir saya, tetapi anak mana pun dari elemen "#markup" tidak akan muncul ketika formulir dirender.

$form['html'] = array(
  '#type' => 'markup',
  '#markup' => '<h2>My Heading</h2>',
  '#tree' => true,
);

$form['html']['element'] = array(
  '#type' => 'textfield',
  '#title' => 'Foo',
);

Dalam contoh ini bidang formulir "elemen" tidak akan diberikan.

Apakah ini Drupal bug, atau apakah saya perlu melakukan sesuatu yang spesifik?

7
user1589

Tidak dapat menggunakan "#tree" dengan elemen "#markup" tampaknya merupakan bug dari Drupal, seperti halaman referensi untuk form API melaporkan bahwa "#tree" didukung oleh elemen "#markup" .

Sebagai solusinya, Anda juga dapat menggunakan properti "#prefix", seperti dalam kode berikut:

$form['html']['element'] = array(
  '#type' => 'textfield',
  '#title' => 'Foo',
  '#prefix' => '<h2>My Heading</h2>',
);

Jika tidak di-render seperti yang Anda harapkan, maka Anda cukup menghapus "#tree" dari kode Anda, yang sepertinya tidak diperlukan, jika yang Anda inginkan hanyalah me-render <h2>My Heading</h2> tag sebelum kolom formulir. Formulir API membuat elemen mengikuti urutan mereka muncul dalam array; jika Anda ingin mengubah urutan, Anda dapat menggunakan properti " # weight ".

$form['html'] = array(
 '#type' => 'markup',
 '#markup' => '<h2>My Heading</h2>',
);

$form['html']['element'] = array(
  '#type' => 'textfield',
  '#title' => 'Foo',
);
8
kiamlaluno

Untuk sedikit lebih tepat, anak-anak #markup elemen ketik tidak dirender. Mereka diproses untuk keperluan formulir.

1
user49