TAB

7 contenuti / 0 new
Ultimo contenuto
TAB

TAB,
qualcuno ha qualche esempio di come creare pagine fatte a TAB??
Ho spulciato un pò nei moduli già sviluppati,ma non sono riuscito a raccapezzarmici...
Grazie!
chupachups.

Quando crei i menu in hook_menu, devi impostare:
'type' => MENU_LOCAL_TASK,

Esempio di un mio progetto (D6):

<?php
 
/*
  $items['bodules/aggiungi'] = array(
    'title' => 'Progetto',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('bodules_form_inserisci_modifica_progetto'),
    'access arguments' => array('admin bodules'),
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'weight' => 0,
  );
  */
 
$items['bodules/%bodules_progetto/principale'] = array(
   
'title' => 'Progetto',
       
'page callback' => 'drupal_get_form',
       
'page arguments' => array('bodules_form_inserisci_modifica_progetto'),
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_LOCAL_TASK,
   
'weight' => 0,
  );
 
// Modifica (non visibile nei menu)
 
$items['bodules/%bodules_progetto/modifica'] = array(
   
'title' => t('Modifica i dati del progetto'),
       
'page callback' => 'drupal_get_form',
       
'page arguments' => array('bodules_form_inserisci_modifica_progetto'),
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_CALLBACK,
  );     
 
// Cancella (non visibile nei menu)
 
$items['bodules/%bodules_progetto/cancella'] = array(
   
'title' => 'Cancella il progetto',
       
'page callback' => 'drupal_get_form',
       
'page arguments' => array('bodules_form_cancella_progetto'),
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_CALLBACK,
  ); 
 
$items['bodules/%bodules_progetto/campidb'] = array(
   
'title' => 'Campi DB',
       
'page callback' => 'drupal_get_form',
       
'page arguments' => array('bodules_form_db'),
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_LOCAL_TASK,
   
'weight' => 1,
  );
 
$items['bodules/%bodules_progetto/riepilogo'] = array(
   
'title' => 'Scarica modulo',
       
'page callback' => 'bodules_riepilogo',
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_LOCAL_TASK,
   
'weight' => 4,
  );   
 
// Cancella (non visibile nei menu)
 
$items['bodules/%bodules_progetto/campidb/%bodules_campidb/cancella'] = array(
   
'title' => 'Cancella il Campo',
       
'page callback' => 'drupal_get_form',
       
'page arguments' => array('bodules_form_db_cancella'),
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_CALLBACK,
  );
 
$items['bodules/%bodules_progetto/campiform'] = array(
   
'title' => 'Campi Form',
       
'page callback' => 'bodules_lista_campiform',
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_LOCAL_TASK,
   
'weight' => 2,
  );     
 
// Cancella (non visibile nei menu)
 
$items['bodules/%bodules_progetto/campiform/%bodules_campidb/modifica'] = array(
   
'title' => 'Modifica campi del Form',
       
'page callback' => 'drupal_get_form',
       
'page arguments' => array('bodules_form_campiform'),
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_LOCAL_TASK,
  );
 
$items['bodules/%bodules_progetto/legami'] = array(
   
'title' => 'Master/Detail',
   
'page callback' => 'bodules_lista_legami',
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_LOCAL_TASK,
   
'weight' => 3,
  );
 
// Cancella (non visibile nei menu)
 
$items['bodules/%bodules_progetto/legami/%bodules_legami/modifica'] = array(
   
'title' => 'Modifica campi del Form',
       
'page callback' => 'drupal_get_form',
       
'page arguments' => array('bodules_form_legami'),
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_LOCAL_TASK,
  );
 
?>

L'indirizzo della $items, determina la struttura, mentre MENU_LOCAL_TASK, ci dice che è un tab. Ovviamente puoi fare anche tab sotto tab

Ciao
Gianni

Grazie mille Gianni!!!
Domani a mente lucida (...forse) ci provo!!!
chupachups.

[ TAB - Risolto ]
Grazie Gianni...Tutto ok!

Ciao Gianni,
le variabili globali come si impostano? O meglio, se costruisco una pagina a tab, come faccio a passare l'id principale attraverso il quale reperisco le informazioni dal db? Ho visto che nel tuo codice usi le variabili %bodules_progetto: come si impostano nei menu tali variabili? COme si valorizzano?

Grazie,
chupachups.

Le passi semplicemente nell'url e le recuperi con la funzione arg(x) dove x stà per l'argomento che vuoi prendere.
Esempio:
www.esempiosito.it?q=node/12
arg(1) = 12

Tornando al codice di esempio che ti ho mandato, quello è specifico per drupal 6. Mentre in drupal 5 puoi definire i percorsi di menu tipo:
bodules/%/legami
dove % indica qualsiasi valore

in drupal 6 le cose sono campiate. Tu puoi passare un valore verificato. Prendiamo il mio esempio (estrapolato dai menu dell'esempio del post precedente):
bodules/%bodules_progetto/legami
significa che il percorso sarà:
bodules/qualsiasi valore verificato dalla funzione "bodules_progetto_load"/legami

.....più difficile da spiegare che da fare.... ti spiego meglio:
tu definisci un percorso e metti il % + "un nome" che poi sarà il nome di una funzione. All'interno della funzione fai le verifiche del valore passato, e restituisci tru o false se questo è corretto. In questo modo la sicurezza è garantita.

Tornando all'esempio sopra io ho bodules/%bodules_progetto/legami in cui: "bodules/" è fisso, "%bodules_progetto" è il valore che passo e "/legami" è fisso. Ora, supponendo che voglio che l'argomento da passare sia un valore numerico, nella funzione di verifica controllo che il valore sia un numero.

Passiamo al concreto....

Nel menu, ad esempio, potrei avere:

<?php
 
......
 
$items['bodules/%bodules_progetto/legami'] = array(
   
'title' => 'Master/Detail',
   
'page callback' => 'bodules_lista_legami',
   
'access arguments' => array('admin bodules'),
   
'type' => MENU_LOCAL_TASK,
   
'weight' => 3,
  );
......
?>

a questa segue la funzione data dall'hook_load:

function bodules_progetto_load($pid) {
if (!is_numeric($pid)) {
return FALSE;
}
return $pid;
}

Come vedi, controllo se è un numero.

Di conseguenza url valido diventa:
www.example.com?q=bodules/12/legami
www.example.com?q=bodules/2/legami
www.example.com?q=bodules/100/legami

non valido:
www.example.com?q=bodules/asdasd/legami
www.example.com?q=bodules/òèàù/legami
www.example.com?q=bodules/12sd/legami

Spero sia chiaro ;-)

Ciao
Gianni

Sei stato chiarissimo e gentilissimo come sempre.
Faccio le mie prove e ti faccio sapere.
Grazie mille!!!
chupachups.