it-swarm.it

Incorporare un modulo "aggiungi nodo" in una pagina

Sto cercando un modo per incorporare un modulo "aggiungi nodo" in una pagina di destinazione. Stavo usando Form Block , ma sembra portare molti errori perché stavo usando una versione dello snapshot di sviluppo.

18
ousneo

Puoi usare:

module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);
28
Daniel Wehner

Sebbene Daniel Wehner rispondi sia assolutamente corretto e funzioni, volevo aggiungere due problemi comuni che ho affrontato con questo approccio e soluzioni alternative per superare tali problemi. Prima il mio codice, poi le spiegazioni:

global $user;
module_load_include('inc', 'node', 'node.pages');
$node = (object) array(
  'uid' => $user->uid,
  'name' => (isset($user->name) ? $user->name : ''),
  'type' => 'YOUR_NODE_TYPE',
  'language' => LANGUAGE_NONE,
);
$form = drupal_get_form('YOUR_NODE_TYPE . '_node_form', $node);

print drupal_render($form)

Perché l'ho fatto in questo modo, invece del semplice Daniel node_add ?

Problema 1: node_add() la funzione cambia il titolo della pagina in Crea 'tipo nodo' , questo è hard coded nella funzione.

Soluzione 1: invece di utilizzare la funzione node_add, Ho copiato il codice e rimosso drupal_set_title. Il codice sopra è lo stesso codice della funzione node_add, Tranne da questa riga.

Problema 2: nella forma incorporata alcune funzioni Ajax non funzionavano. Ad esempio, se si dispone di un campo che può avere valori illimitati, in modo da avere un pulsante "Aggiungi un altro elemento" o se si dispone di un campo di caricamento del file nel modulo, non funzionano.

Soluzione 2: nel modulo personalizzato, implementare hook_menu_alter() per i percorsi delle chiamate ajax e includere node.pages.inc.

function YOURMODULE_menu_alter(&$items) {
  $items['file/ajax']['file path'] = drupal_get_path('module', 'node');
  $items['file/ajax']['file'] = 'node.pages.inc';
  $items['system/ajax']['file path'] = drupal_get_path('module', 'node');
  $items['system/ajax']['file'] = 'node.pages.inc';
}
16
Елин Й.

Se utilizzo il codice della risposta accettata ...

module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);

... all'interno di una funzione di callback della pagina, quindi print drupal_render.. questo si traduce in una pagina completamente senza tema (dall'aspetto rotto).

Quindi, invece, ho appena return 'ed il $form:

module_load_include('inc', 'node', 'node.pages');
$form = node_add('program_registration');
return $form;
0
alec