form callback & hook_validate

9 contenuti / 0 new
Ultimo contenuto
form callback & hook_validate

Bene, diciamo che questo periodo sembra essere particolarmente profiquo dal punto di vista "didattico". Come al solito sono alle prese con qualche esperimento...

La situazione:
1) Ho creato un hook_menu() per realizzare il link di amministrazione di un modulo;

<?php
/**
  * Implementation of hook_menu()
  **/
function shorty_menu() {
 
$items = array();
 
$items['admin/settings/modulename'] = array(
   
'title' => 'title',
   
'description' => 'Description ... ',
   
'page callback' => 'drupal_get_form',
   
'page arguments' => array('modulename_admin'),
   
'access arguments' => array('access administration pages'),
   
'type' => MENU_NORMAL_ITEM,
   );
  return
$tems;
}
?>

2) In secondo luogo ho creato la funzione "modulename_edmin" menzionata da "page arguments"

<?php
//same name of     'page arguments' => array('modulename_admin')
function modulename_admin(){
$form = array();
$form['admin_module'] = array(
   
'#type' => 'textfield',
   
'#title' => t('admin module'),
   
'#default_value' => variable_get('admin_module', ''),
   
'#size' => 150,
   
'#description' => t("Description"),
   
'#required' => TRUE,
  );
  return
system_settings_form($form);
}
?>

3) ed infine ho realizzato un hook_nameCalllback_validate() così da validare il contenuto del form precedente

<?php
function modulename_admin_validate($form, &$form_state) {
// ... bla bla bla ..
 
drupal_set_message('message', $type = 'status', $repeat = FALSE);
}
?>

fin qui sembra funzionare tutto infatti dopo aver insertìito i valorì nel form ed inviato i dati mi compare anche il messaggio settato dal "drupal_se_message, ma al contrario delle altre volte in cui non ho mai usato un "validate", in questo caso i dati dentro la Text area non "ricompare" quando si riaccede alla pagina di amministrazione. Aggiungo che i dati vengono correttamente passati al "validate" perchè ho provato a stamparli per debuggare e mi vengono stampati correttamente, ma non vengono salvati nel Database . Perchè?

Sulla pagina di hook_validate si parla di form di nodi, non della configurazione dei moduli:

http://api.drupal.org/api/function/hook_validate

"This is a hook used by node modules. It is called to allow the module to verify that the node is in a format valid to post to the site. Errors should be set with form_set_error()."

Che sia quello?

Mario Vercellotti (Vermario)
Freelance
http://www.verdevelop.com

Vermario, credo che confondi il hook (che sarebbe modulename_validate) con una convenzione dei form : blabla, blabla_validate, blabla_submit.
Per rispondere a kiuz, l'informazione non riappare e non viene salvato perchè non l'hai detto di farlo!

1. L'informazione non riappare perchè la funzione di 'page arguments' cioè modulename_admin() viene dato il parametro $form_state, ma che tu non hai usato. Devi prendere i valori da $form_state['#values']['bla'] ed inserirli in $form['bla']['#value']. Ho provato ma non ho trovato codice per dare un esempio...

2. Uhm, non è che ti sei dimenticato la function modulename_admin_submit($form, &$form_state) per salvare i dati (validati) del db?

Più imparo, più dubito.

quoteo jhl.verona, il validate vale per TUTTI i form e servono per VALIDARE i dati presenti, non per memorizzarli. Per quello esiste appunto il submit che viene eseguito solo se in validate non viene sollevata l'eccezione (tramite form_set_error) che non fa passare la validazione del form (la classica pagina del form con il campo segnato in rosso e il messaggio d'errore).

Ciao
Marco
--
My blog
Working at @agavee

mavimo wrote:
quoteo jhl.verona, il validate vale per TUTTI i form e servono per VALIDARE i dati presenti, non per memorizzarli. Per quello esiste appunto il submit che viene eseguito solo se in validate non viene sollevata l'eccezione (tramite form_set_error) che non fa passare la validazione del form (la classica pagina del form con il campo segnato in rosso e il messaggio d'errore).

Concordo con Mavimo, infatti proprio per queste motivazioni che non capivo cosa andava storto! Ad ogni modo era un problema talmente banale che mi vergono a dirlo! :D :D

Ora già che siamo sollevo un altro problema più generico: supponiamo di dover fare un "check" nel validate, ma l'api di cui dispongon (che è esterna) mi genera o un FATAL ERROR (ci indica che i dati sono errati) oppure una stringa. Bene a questo punto come posso chiamare questa api che in taluni casi generarà questo FATAL ERROR, ma senza mandarmi in TILT Drupal?

Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.

WeBrain Solution | Pillsofbits Of Bits

kiuz wrote:
Concordo con Mavimo, infatti proprio per queste motivazioni che non capivo cosa andava storto! Ad ogni modo era un problema talmente banale che mi vergono a dirlo! :D :D

E quindi non l'hai detto... Ma io non ho capito cos'era questo banalità...

kiuz wrote:
Ora già che siamo sollevo un altro problema più generico: supponiamo di dover fare un "check" nel validate, ma l'api di cui dispongon (che è esterna) mi genera o un FATAL ERROR (ci indica che i dati sono errati) oppure una stringa. Bene a questo punto come posso chiamare questa api che in taluni casi generarà questo FATAL ERROR, ma senza mandarmi in TILT Drupal?

Si può prefissare la chiamata alla funzione con un '@' per sopprimere gli errori: http://www.php.net/manual/en/language.operators.errorcontrol.php

Più imparo, più dubito.

jhl.verona wrote:
kiuz wrote:
Concordo con Mavimo, infatti proprio per queste motivazioni che non capivo cosa andava storto! Ad ogni modo era un problema talmente banale che mi vergono a dirlo! :D :D

E quindi non l'hai detto... Ma io non ho capito cos'era questo banalità...

kiuz wrote:
Ora già che siamo sollevo un altro problema più generico: supponiamo di dover fare un "check" nel validate, ma l'api di cui dispongon (che è esterna) mi genera o un FATAL ERROR (ci indica che i dati sono errati) oppure una stringa. Bene a questo punto come posso chiamare questa api che in taluni casi generarà questo FATAL ERROR, ma senza mandarmi in TILT Drupal?

Si può prefissare la chiamata alla funzione con un '@' per sopprimere gli errori: http://www.php.net/manual/en/language.operators.errorcontrol.php[/quote]

Allora per la "@" vedrò stasera se funziona, se no dovrò implementare un metodo per fare un check senza errore.

Mentre l'errore demenziale era che avevo dichiarato il nome dellelemento del "form" diverso da quello del "VARIABLE_GET()".

<?php
//same name of     'page arguments' => array('modulename_admin')
function modulename_admin(){
$form = array();
$form['admin_module'] = array(
 
// .....
   
'#default_value' => variable_get('BLABLA', ''),
//....
}
?>

Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.

WeBrain Solution | Pillsofbits Of Bits

Si, se hai solo dei campi che devono essere setatti nelel variabili puoi farlo senza creare la submit, ma usando il system_settings_form.

Ciao
Marco
--
My blog
Working at @agavee

mavimo wrote:
Si, se hai solo dei campi che devono essere setatti nelel variabili puoi farlo senza creare la submit, ma usando il system_settings_form.

quindi per concludere questa discussione che dopotutto anche con il mio errore a dir poco demenziale è servito a qualcosa...
Quindi il "submit" me lo creerei nel caso le variabili dei campi non devono essere solo salvate ma anche per esempio processate e salvate in un formato o in una locazione diversa da quella prevista dal form...

Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.

WeBrain Solution | Pillsofbits Of Bits