ciao a tutti
ho creato con drupal un sito per un dipartimento universitario, e avrei bisogno di inserire delle pagine anche per la prenotazione agli esami, dunque i docenti devono poter inserire gli esami, e gli studenti prenotarsi. Ho creato tramite flexinode un contenuto molto semplice per l'inserimento da parte dei docenti, ma non so come gestire la prenotazione per gli studenti. Un mio amico mi ha fornito delle pagine in php per un sito che ha costruito lui con lo stesso fine, ma non riesco ad integrarle in drupal visto che non ci capisco una mazza... Se ci fosse qualche meritorio volenteroso disposto ad aiutarmi, gli potrei mandare le pagine e poi fare un monumento... (oppure vanno bene soluzioni alternative senza copiare le pagine del mio amico)
Grazie!
Prenotazione esami
Mer, 24/05/2006 - 19:56
#1
Prenotazione esami
mi sono anche procurata un modulo sviluppato per un CMS (sempre in php ovviamente) per l'e-learning, ma non so come devo fare per adattarlo a drupal.. qualcuno mi aiuti.. poi potremmo metterlo tra i moduli di drupal ed essere utile anche a tutta la comunità...
Cara Flavia,
io nemmeno ci capisco molto , pero' alla fine ho imparato a scrivere moduli in proprio (come le pagine di cui mi parli) e a farle funzionare in drupal....se vuoi posso darti qualche indicazioni...non faccio promesse sui tempi !
Gianni
infatti stavo cercando di capire come si scrivono i moduli, scopiazzando quelli già esistenti.. se ti andasse di cimentarti te ne sarei davvero grata, qualsiasi indicazione è preziosa!
in particolare, credo di dover creare nuove tabelle nel db e non so bene come fare..
Con un po' di calma, debbo trovare un po' di tempo, posso inviarti dei miei moduli di esempio molto banali, da cui puoi capire la struttura, insomma attraverso i quali "punti" ad un codice php da te sviluppato. Per quanto riguarda le tabelle nel DB, io ho costruito per i miei scopi (un sito dove la gente si iscrive ad una societa') un nuovo DB ed ho sfruttato le API drupal per gestire l'interazione con esso. in questo modo non interferisco con il db di Drupal evitando spiacevoli fastidi...
saluti,
PS ...sai, la comunita' drupal mi ha dato e mi sta dando molto: e' arrivato il momento che contracambi...
Gianni
gianni ti ringrazio, se mi potessi mandare i moduli come esempio/base sarebbe un buon punto di partenza credo per capirci qualcosa di più.. se vuoi scrivermi in privato puoi spedirli a violaine@rdn.it (se ci sono problemi fammi sapere)
se riesco a combinare qualcosa di buono sarò poi felice di metterlo a disposizione..
a presto allora, ci conto ;)
Ti mando un esempio anch'io, però sul forum in modo che sia leggibile da tutti. Sotto trovi un esempio di gestione lista accessori auto (è un esempio estremamente semplice):
--
-- Struttura della tabella `gest_accessori`
--
CREATE TABLE `gest_accessori` (
`id` int(6) NOT NULL default '0',
`nome` varchar(50) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dump dei dati per la tabella `gest_accessori`
--
INSERT INTO `gest_accessori` VALUES (2, 'ABS');
INSERT INTO `gest_accessori` VALUES (3, 'AIRBAG LATERALI');
INSERT INTO `gest_accessori` VALUES (4, 'ANTIFURTO');
INSERT INTO `gest_accessori` VALUES (5, 'AIRBAG CONDUCENTE');
INSERT INTO `gest_accessori` VALUES (6, 'AIRBAG PASSEGGERO');
INSERT INTO `gest_accessori` VALUES (7, 'AIRBAG PASSEGGERI POSTERIORI');
INSERT INTO `gest_accessori` VALUES (8, 'ALZACRISTALLI ELETTRICI');
INSERT INTO `gest_accessori` VALUES (9, 'ASC');
INSERT INTO `gest_accessori` VALUES (10, 'COMPUTER DI BORDO');
INSERT INTO `gest_accessori` VALUES (11, 'CAPOTE ELETTRICA');
INSERT INTO `gest_accessori` VALUES (12, 'CERCHI IN LEGA');
INSERT INTO `gest_accessori` VALUES (13, 'CERCHI A TENDINA');
INSERT INTO `gest_accessori` VALUES (13, 'CHIUSURA CENTRALIZZATA');
INSERT INTO `gest_accessori` VALUES (14, 'CLIMATIZZATORE');
INSERT INTO `gest_accessori` VALUES (15, 'CONTROLLO AUTOMATICO TRAZIONE');
INSERT INTO `gest_accessori` VALUES (16, 'CONTROLLO AUTOMATICO CLIMA');
INSERT INTO `gest_accessori` VALUES (17, 'CRUISE CONTROL');
INSERT INTO `gest_accessori` VALUES (18, 'ESP');
INSERT INTO `gest_accessori` VALUES (19, 'FARI XENON');
INSERT INTO `gest_accessori` VALUES (20, 'FENDINEBBIA');
INSERT INTO `gest_accessori` VALUES (21, 'GANCIO TRAINO');
INSERT INTO `gest_accessori` VALUES (22, 'IMMOBILIZZATORE ELETTRICO');
INSERT INTO `gest_accessori` VALUES (23, 'INTERNI IN PELLE');
INSERT INTO `gest_accessori` VALUES (24, 'LETTORE CD');
INSERT INTO `gest_accessori` VALUES (25, 'PARK DISTANCE CONTROL');
INSERT INTO `gest_accessori` VALUES (26, 'PORTA PACCHI');
INSERT INTO `gest_accessori` VALUES (27, 'REGOLAZIONE ELETTRICA SEDILI');
INSERT INTO `gest_accessori` VALUES (28, 'SEDILI RISCALDATI');
INSERT INTO `gest_accessori` VALUES (29, 'SERVOSTERZO');
INSERT INTO `gest_accessori` VALUES (30, 'SISTEMA DI NAVIGAZIONE');
INSERT INTO `gest_accessori` VALUES (31, 'SOSPENSIONI ATTIVE');
INSERT INTO `gest_accessori` VALUES (32, 'TETTUCCIO APRIBILE');
INSERT INTO `gest_accessori` VALUES (33, 'TRAZIONE INTEGRALE');
INSERT INTO `gest_accessori` VALUES (34, 'VEICOLO ELABORATO');
INSERT INTO `gest_accessori` VALUES (35, 'VERNICE METALLIZATA');
INSERT INTO `gest_accessori` VALUES (36, 'VOLANTE MULTIFUNZIONE');
INSERT INTO `gest_accessori` VALUES (39, 'BRACCIOLO');
Codice per drupal 4.7 (accessorio.module):
* ---------------------------------------------------------------------
* MODULO PER LA GESTIONE DELLE Accessori AUTO
* v 0.1 14/11/2005
* Licenza Modulo GPL
* ---------------------------------------------------------------------- */
/*
----------------- FUNZIONI DI BASE PER IL MODULO -----------------------
*/
function accessorio_help($section='') {
$output = '';
switch ($section) {
case "admin/modules#description":
$output = t("*** Gestione Accessorio Auto ***");
break;
}
return $output;
}
// Determiniamo gli accessi al modulo (dando poi i giusti permessi nell'amministrazione)
function accessorio_perm() {
return array('amministrazione accessorio','gestione accessorio');
}
// Gestione dei Menu
function accessorio_menu() {
$items = array();
// Principale (operazioni principali)
$items[] = array(
'path' => 'tabelle/accessorio',
'title' => t('Accessori'),
'callback' => 'accessorio_form',
'access' => user_access('gestione accessorio'),
'type' => MENU_NORMAL_ITEM);
// Se c'è un accessorio selezionato, attiva il menu modifica
if (arg(2)>0) {
// Modifica (non visibile nei menu)
$items[] = array(
'path' => 'tabelle/accessorio/'.arg(2).'/modifica',
'title' => t('Modifica'),
'callback' => 'accessorio_form',
'access' => user_access('gestione accessorio'),
'type' => MENU_CALLBACK );
// Modifica (non visibile nei menu)
$items[] = array(
'path' => 'tabelle/accessorio/'.arg(2).'/cancella',
'title' => t('Cancella'),
'callback' => 'accessorio_form_cancella',
'access' => user_access('gestione accessorio'),
'type' => MENU_CALLBACK );
}
return $items;
}
// Cancellazione accessori
function accessorio_form_cancella() {
// Mostra quel accessorio
$result = db_query("
SELECT
id,
nome
FROM {gest_accessori}
WHERE
id = %d
",
arg(2)
);
$dati = db_fetch_object($result);
$output .= confirm_form(
'accessorio_form_cancella',
$form,
t('ATTENZIONE!!! Confermi la cancellazione? '),
'tabelle/accessorio/'.arg(2).'/modifica',
'Nome: '.$dati->nome.'',
t('Cancella'),
t('Annulla')
);
return $output;
}
// CONFERMA CANCELLAZIONE
function accessorio_form_cancella_submit($form_id, $form_values) {
// Cancella il Soggetto
db_query("
DELETE FROM
{gest_accessori}
WHERE
id = %d
",
arg(2)
);
drupal_set_message(t('Accessorio Cancellato!!'),'error');
drupal_goto('tabelle/accessorio');
}
// Disegna il form principale degli accessori
function accessorio_form() {
// Se l'argomento è maggiore di 0 significa che è selezionato un elemento. Fai la query e mostra i dati
if (arg(2)>0) {
// Ricerca se esiste gia
$result = db_query('
SELECT
id,
nome
FROM
{gest_accessori}
WHERE
id = %d
',
arg(2)
);
$value = db_fetch_array($result);
}
$form['#method'] = 'post';
$form['datiprincipali'] = array(
'#type' => 'fieldset',
'#title' => t('Inserimento/Modifica'),
'#prefix' => '',
'#suffix' => '',
);
$form['datiprincipali']['nome'] = array(
'#type' => 'textfield',
'#title' => t('Accessorio'),
'#size' => 22,
'#maxlength' => 30,
'#default_value' => $value['nome'],
'#prefix' => '',
'#suffix' => '',
);
// pulsante conferma
$form['submit'] = array('#type' => 'submit', '#value' => t('Conferma'));
// Provvede a controllare il form completando eventuali valori omessi, costruisce e stampa il form
$output .= drupal_get_form('accessorio_form', $form);
// Costruisci i titoli da mostrare
$header = array(
array('data' => t('id'), 'field' => 'id'),
array('data' => t('Nome'), 'field' => 'nome', 'sort' => 'asc'),
t('Modifica'),
t('Elimina'),
);
// Costruisci la query
$sql = 'SELECT
id,
nome
FROM {gest_accessori}
'.$condition.tablesort_sql($header);
// Applica la query (paginata)
$result = pager_query($sql, 25);
while ($dati = db_fetch_object($result)) {
$rows[] = array(
$dati->id,
$dati->nome,
l(t('Dettaglio'), '/tabelle/accessorio/'.$dati->id.'/modifica', NULL ),
l(t('Cancella'), '/tabelle/accessorio/'.$dati->id.'/cancella', NULL ),
);
}
// Temizzazione della tabella e titoli
$output .= theme('table', $header, $rows);
// Temizzazione della pagina
$output .= theme('pager', NULL, 10, 0);
// print theme('page', $output);
return $output;
}
// INSERIMENTO/MODIFICA DATI IMMESSI NEL FORM (Validazione dei dati)
function accessorio_form_validate($form_id, $form_values) {
// Imposta l'array dei dati
$errors = array();
if (arg(2)<=0) {
$result = db_query('
SELECT id FROM {gest_accessori}
WHERE
nome = \'%s\'
',
$form_values['nome']
);
if (db_num_rows($result) > 0) {
$errors['nome'] = t('Attenzione!! Accessorio già inserita');
}
}
if ($form_values['nome']=='') {
$errors['nome'] = t('Attenzione!! Inserire la Accessorio');
}
// Imposta l'array degli errori trovati
foreach ($errors as $name => $message) {
form_set_error($name, $message);
}
// Ritorna il numero degli errori trovati
return count($errors) == 0;
}
// INSERIMENTO/MODIFICA DATI IMMESSI NEL FORM
function accessorio_form_submit($form_id, $form_values) {
if (arg(2)>0) {
db_query('
UPDATE {gest_accessori}
SET
nome = \'%s\'
WHERE
id = %d
',
drupal_strtoupper($form_values['nome']),
arg(2)
);
}
else {
// Recupera l'ultimo id inserito
$id_accessorio = db_next_id('gest_accessorio_id');
// Inserisci Accessorio
db_query('
INSERT INTO {gest_accessori}
(id, nome)
VALUES
(%d, \'%s\')
',
$id_accessorio,
drupal_strtoupper($form_values['nome'])
);
}
}
Link Utili in italiano:
Altro esempio più complesso (necessita di variazione su api per cambio api su 4.7 ufficiale):
http://www.drupalitalia.org/?q=node/1062
Una guida che ti può aiutare molto:
http://www.drupalitalia.org/?q=system/files&file=Crazione_moduli_Drupal.pdf
Manuale INDISPENSABILE per le api di drupal:
http://drupaldocs.org/api/head
Ciao
Gianni Giusti
grazie, ora ci do un'occhiata!
a presto
Ciao Gianni,
Visto che la creazione di un modulo non è sicuramente facile per chi inizia, ed ogni esempio è estremamente utile soprattutto se commentato e spiegato come i tuoi, penso che sia Bello mettere alcuni esempi come questo direttamente nella documentazione in maniera che sia più visibile.
Se per te non è un problema copierei il codice nella documentazione a meno che tu non voglia ancora aggiungere o puntualizzare qualche cosa!!
Fammi sapere cosa ne pensi o se hai idee diverse
Grazie
Uccio
Il mio sito con drupal
Chiunque ha esempi che aiutino la comunità è invitato a postarli, giannino aspetto i tui!!
Grazie
Uccio
Il mio sito con drupal
Uccio, la penso esattamente come te: iniziare a scrivere un modulo non è semplicissimo. Una cosa che dico sempre è che drupal ha una curva di apprendimento abbastanza dura, capito come si sviluppa un modulo, tutto diventa estremamente semplice.
Il codice che ho postato è sotto GPL e chiunque può farne ciò che desidera. Ovviamente per me è un piacere se viene aggiunto alla documentazione, ti dirò di più.... ho fatto uno script per generare automaticamente un modulo per drupal, partendo da una qualsiasi tabella (crea un modulo di inserimento/ricerca/cancellazione/modifica + commenti), non è un gran bel pezzo di codice perchè è stato creato per "consumo personale" ed utilizzato per velocizzare la scrittura di moduli (per lo meno il grosso). Mi piacerebbe rilasciarlo, ma al momento son molto impegnato e non riesco a scrivere un briciolo di guida all'uso. Ho poi iniziato un tutorial per spiegare come scrivere un modulo, ma anche questo è fermo alla sesta pagina per mancanza di tempo. Quest'estate guardo se riesco a finire tutto..... nel frattempo accontentatevi di quel pezzo di codice sopra :-)
Ciao
Gianni
Cari tutti,
innanzi tutto scusatemi se rispondo solo ora.
Sì, la possibilià di "depositare esempi" funzionanti mi piace molto.
All'inizio ho detto a Flavia che gli avrei fornito gli stessi privatamente per non appesantire il forum. Ma dalla discussione e' emerso che sarebbe buona cosa renderli disponibili.
Lasciatemi un po' di tempo e vi preparo qualche cosa.....ho molte cose in mente !
Saluti a tutti
Giannino (così mi distinguerete dall'altro Gianni !)