it-swarm.it

L'elemento del modulo "#markup" non può avere figli

Ho il mio modulo, ma qualsiasi elemento figlio dell'elemento "#markup" non verrà visualizzato quando il modulo viene visualizzato.

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

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

In questo esempio il campo modulo "elemento" non verrà visualizzato.

È questo un Drupal bug o devo fare qualcosa di specifico?

7
user1589

Non poter usare "#tree" con un elemento "#markup" sembra un bug di Drupal, poiché la pagina di riferimento per l'API del modulo riporta che "#tree" è supportato dall'elemento "#markup" .

Per ovviare al problema, puoi anche utilizzare la proprietà "#prefix", come nel codice seguente:

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

Se non viene visualizzato come previsto, puoi semplicemente rimuovere "#tree" dal tuo codice, il che non sembra essere necessario, se tutto ciò che vuoi è rendere il <h2>My Heading</h2> tag prima dei campi del modulo. L'API del modulo esegue il rendering degli elementi seguendo l'ordine in cui compaiono nella matrice; se si desidera modificare l'ordine, è possibile utilizzare la proprietà " # peso ".

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

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

Per essere un po 'più precisi, i bambini di #markup gli elementi di tipo non vengono visualizzati. Tuttavia, vengono elaborati per scopi di forma.

1
user49