hook_forms e image_node_form

3 contenuti / 0 new
Ultimo contenuto
hook_forms e image_node_form

Mi servirebbe copiare l'intera form di image_node_form (modulo image) presso un'altra form.
Pertanto ho utilizzato hook_forms, con la seguente implementazione:

<?php
/**
 * Implementation of hook_forms
 */
function bp_rivista_forms($form_id, $args) {
  if (
$form_id == 'bp_rivista_node_form') {
   
$forms['bp_rivista_node_form'] = array(
       
'callback' => 'image_node_form',
       
'callback arguments' => $args,
    );
  }
  return
$forms;
}
?>

Il callback della voce di menu che implementerebbe tale form, ha il seguente codice:

<?php
function bp_rivista_node_add_rivista() {
  global
$user;
 
$node = array('uid' => $user->uid, 'name' => (isset($user->name) ? $user->name : ''), 'type' => 'image', 'language' => '');
  return
drupal_get_form('bp_rivista_node_form', $node);
}
?>

Cliccando sulla voce di menu, ottengo questo errore:

Quote:
warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'image_node_form' was given in /.../includes/form.inc on line 376.

Mi sembra alquanto strano, poiché node_add implementa questo codice:

<?php
 
//...
$output = drupal_get_form($type .'_node_form', $node);
//...
?>

Dove $type è 'image', quindi passa 'image_node_form' come id.

Via hook_form_alter, io stesso ho implementato degli edit alla form id 'image_node_form'...
Infine, ho provato con altre form e questa implementazione funziona.

Mi sembra strano, perché a me appare quell'errore e a tutto il resto no? Forse qualche mia svista da qualche parte?
Se potessi copiare quella form (trattandola come una form factory), risolverei diversi problemi...

Suggerimenti? Idee? Aiuti?
Grazie.

In un certo senso hai risposto alla tua stessa domanda: usa drupal_get_form('image_node_form');

Perchè? Perche non esiste una funzione (il 'callback') image_node_form, il form viene creato usando un processo diverso - vedi node_forms per vedere come Big D crea un form per ogni tipo di contenuto.

Nota: puoi passare gli argumenti extra anche a drupal_get_form

Più imparo, più dubito.

Ok per la nota: sapevo già. Sapevo anche che image_node_form non fosse un callback, ma credevo che comunque riuscisse in qualche modo a richiamare la form, così come faceva ad esempio la hook_form_alter, però non ho guardato attentamente node_forms... E qui ho capito di più: non essendo callback bensì una form già clonata, non potrei richiamarla come fosse un callback dunque richiamo la form originaria (node_form) passando i parametri giusti, così si richiama tutte le hook_forms utili fino alla mia...

Bene! Ho appena provato su code e funzia: ho la form clonata... Adesso studierò per risolvere altri problemi XD

Grazie.