Relazioni tra tabelle dati

10 contenuti / 0 new
Ultimo contenuto
Relazioni tra tabelle dati

Salve a tutti. Sono nuovo di questo forum e di Drupal che conosco da qualche tempo, ma che non ho mai usato veramente per creare un sito web.
Ho realizzato il sito della scuola nella quale lavoro usando PHP e MySQL, ma ora vorrei riprogettare il tutto con Drupal che mi sembra un sistema solido ed affidabile e che mi permetterebbe una maggiore flessibilità nella catalogazione dei contenuti.
Tuttavia non sono riuscito a trovare un sistema efficace per implementare il sistema di relazioni tra tabelle del DB che mi permette, nel sito della scuola (www.itiscapellini.it/udienze.php), di creare dinamicamente una pagina per ogni classe nella quale compare l'elenco dei docenti, la relativa materia di insegnamento, l'orario di ricevimento. Ovviamente il nome del docente è linkato alla pagina personale del docente, nella quale sono visibili la sua foto, gli incarichi ricoperti, i materiali didattici messi a disposizione degli alunni, le classi assegnate etc; anche in questo caso i dati sono ricavati da tabelle separate del DB (vedi come esempio: http://www.itiscapellini.it/docenti.php?docente=67).
Ho visto che con cck abbinato a views è possibile creare tipi di contenuto particolari da visualizzare a piacimento, ma non mi pare sia quello che sto cercando, anche perché credo di aver capito che le relazioni tra i campi sono possibili a livello di "node", mentre nel mio caso non vedo la necessità di creare un "node" per esempio per ogni materia o per i giorni della settimana oppure, ancora, per gli incarichi destinati ai docenti etc.
Probabilmente è la mia ignoranza relativa a Drupal, ma mi sembra che il tutto sia molto più complesso del "puro" PHP!
Qualcuno mi saprebbe dare una dritta sulla strada da seguire?
Ringrazio tutti.

Da quanto mi ha insegnato l'esperienza di utilizzo di Drupal, se usi Drupal, devi pensare come Drupal; voglio dire che la tua idea è corretta, dovrai creare un contenuto CCK per ogni materia, mentre docenti e alunni saranno utenti, mentre per gli impegni dei docenti dovrai visualizzare una vista calendario tramite views alla quale associare i vari eventi (che sono ancora contenuti CCK) ... Il tutto condito da un bel pò di theme overriding per far visualizzare le cose proprio come vuoi.

La mia dritta, nel tuo caso specifico, è:
hai valutato l'utilizzo di Moodle? http://moodle.org/
è un CMS strutturato sull'eLearning, a differenza di Drupal.

Spero che ora non verrò cacciato da drupalitalia :D, ma se non sei un esperto programmatore Drupal, credo che ti sia più facile realizzare un sito di apprendimento scolastico con Moodle.

Qualche considerazione dal punto di vista di un non-programmatore:
1) il sito è fatto benissimo, io valuterei bene la necessità migrarlo su drupal o altro CMS. Ad esempio, se non prevedi di aggiungere altre features, forse potrebbe essere sufficiente migliorare l'interfaccia di gestione.
2) il sito, almeno per come la vedo io, è perfetto per drupal. Anzi, sembra un caso-studio fatto apposta per un tutorial. Drupal è eccezionale proprio per come permette di gestire con estrema flessibilità le relazioni tra contenuti. Non c'è quasi mai un solo modo per ottenere un determinato risultato.
3) per il concetto di "node": il nome deriva dall'analogia con i nodi delle piante, ovvero i punti da cui si dipartono rami e foglie. Ciascun nodo è un'unità di contenuto, identificata da un ID numerico univoco, il che rende molto semplice ed efficacie la costruzione di relazioni tra contenuti.
4) per quanto riguarda CCK e Views: concettualmente sono uno la controparte dell'altro; con CCK crei i campi che contengono le informazioni di ciascun tipo di contenuto, ad esempio un nodo del tipo "docente" potrbbe avere i campi nome, materia, foto, incarichi, classi, etc. Ciascun campo può essere relazionato ad uno o più nodi tramite riferimento diretto (node reference) o attraverso la tassonomia (un altro punto di forza di drupal). Views, fa esattamente l'opposto: permette di costruire query sul DB per recuperare i vari campi ed organizzarli in liste di contenuto nelle combinazioni desiderate.

Ma questa è solo la punta dell'iceberg, come dice giustamente dalad, il difficile è comprendere il "drupalese" e capire come "ragiona" drupal. Una volta superato questo scoglio resta solo l'imbarazzo della scelta. In questo senso la documentazione disponibile su drupal.org è una risorsa eccezionale...oltre ovviamente a questo forum.

Una nota sulla performance: tieni presente che a seconda della configurazione, drupal può essere molto "esigente" in termini di risorse hardware. A prima vista però non dovrebbe essere il tuo caso.

Imho stai trascurando una cosa FONDAMENTALE, che è la tassonomia :D

Ogni classe è una voce tassonomica, ogni tipologia di insegnamento è una voce della tassonomia, i nodi Insegnamento saranno collegati ad una materia ed a N classi, a questo punto con CCK e views hai quelllo che ti serve. Aggiungendo puoi andare a gestire maggiori informazioni sui docenti con profile, nodeprofile, ...

Andando a complicarti ancora di più puoi pernsare ad Organic Group, ma in questo caso non credo sia necessario.

Per quanto riguarda moodle è un sistema di e-learning, non un CMS, e per di più non è proprio così semplice da usare e flessibile (ma ovviamente dipende dalle esigenze).

Ciao
Marco
--
My blog
Working at @agavee

Trovo preziosi e illuminanti tutti i suggerimenti che mi sono stati forniti e ringrazio quanti si sono presi a cuore il mio caso. Essendo la prima volta che chiedo aiuto alla comunità di programmatori (o esperti) di Drupal, sono rimasto favorevolmente colpito dalla disponibilità e tempestività degli interventi.
Farò tesoro delle indicazioni e mi metterò a studiare con maggiore attenzione il funzionamento di questo CMS. Per ora sono confortato dal fatto che sto camminando sulla giusta direzione e che le potenzialità e la flessibilità di Drupal mi permettano di ottenere il risultato che mi aspetto.
Ringrazio soprattutto bohz per i complimenti rivolti al sito della mia scuola che è frutto di settimane di studio di PHP e di numerose prove e miglioramenti successivi (se non si è capito la mia formazione umanistica è lontana anni luce da una preparazione tecnica relativa ai linguaggi di programmazione). Tuttavia credo che ora i tempi siano maturi per una migrazione di quel sito verso un sistema stabile, sicuro e soprattutto flessibile dal momento che ho intenzione di potenziarne le funzionalità.
L'idea sarebbe quella di fornire un accesso ad ogni docente della scuola che autonomamente potrebbe inserire i materiali didattici per le sue classi e che potrebbe contemporaneamente accedere ad un'area riservata, nascosta quindi all'utenza, per leggere informazioni di vario genere di interesse interno (circolari, comunicazioni, etc.)
Per quanto riguarda moodle, lo conosco già, anche se non bene, ma mi pare fuori dalle necessità della nostra scuola, a prescindere dal fatto che lo trovo un sistema molto pesante, complesso e lontano dai requisiti di accessibilità ai quali io personalmente tengo molto. Ma non è escluso che in futuro...
Grazie ancora e... a presto.
Tiziano

he he sono io il primo a dire che moodle è una dannazione da programmare... soprattutto se vuoi una virgola di diverso da quello per cui è stato pensato. Drupal è senz'altro superiore e mi fa piacere che ti abbia convinto!
Buon lavoro

Tiziano, se ti interessa io e Bohz abbiamo appena brevemente disquisito di relazioni tra tabelle in un altro thread nello showcase:
http://www.drupalitalia.org/node/7070

Dopo alcuni giorni di studio sul funzionamento di CCK... sono ancora in alto mare. Cerco di spiegare meglio ciò di cui ho bisogno.
Il problema consiste nella necessità di creare relazioni tra classi, docenti e materie, tenendo conto del fatto che ogni docente può insegnare più materie e non necessariamente in tutte le classi che gli sono assegnate; ad esempio uno può insegnare matematica in una classe, fisica in un'altra, entrambe le materie in un'altra ancora. Quindi creare una relazione tra insegnante e classe non basta per sapere quale materia insegna in quella classe (né tantomeno creare una relazione tra classe e materia può servire per capire quale docente la insegna).
Nel DataBase relazionale che ho costruito per il sito della scuola (www.itiscapellini.it) ho creato una tabella "docenti", una tabella "materie", una tabella "classi" (a dire il vero la tabella "classi" contiene solo i riferimenti alla tabella "tipologia_classe" e "sezioni", per il semplice fatto che una classe 1ª presenta materie diverse rispetto ad una classe 5ª informatici. Dunque ho costruito una tabella che contiene le relazioni tra "tipologia_classe" e "materie" per indicare quali materie si insegnano in quali classi).
Ho infine creato una tabella "consigli_di_classe" i cui records sono costituiti dall'abbinamento tra classe, materia, docente. In questo modo risulta semplice interrogare il DB per estrarre tutti i docenti di una classe (e le relative materie insegnate), tutte le classi assegnate a un docente, tutti i docenti che insegnano una determinata materia, tutti i docenti che insegnano fisica nelle classi prime, ecc.
Come tradurre tutto questo in drupalese?
Indipendentemente dal fatto che i docenti siano nodi o users, che le materie siano nodi o termini di tassonomia, che le classi siano nodi o termini di tassonomia... al massimo riesco (con CCK) a creare relazioni biunivoche (classe-docente, materia-docente), mai relazioni multiple.
Non so se ho inteso bene quello che bohz ha scritto: "Ciascun campo può essere relazionato ad uno o più nodi...". Io al massimo riesco a relazionare un campo con un nodo, non di più.
Ho trovato anche il modulo "associated nodes", ma non credo che faccia al caso mio.
Dovrei aggiungere del PHP per recuperare le informazioni dal DB?
Con il mio sistema (quello in uso nel sito della scuola), per popolare la tabella "consigli_di_classe", prima scelgo da una form la classe, quindi vengo inviato in una pagina dove sono elencate tutte le materie previste per quella classe; a fianco di ognuna ho una select list con i nomi dei docenti; una volta scelti tutti i docenti corrispondenti a ciascuna materia invio il tutto ad uno script che popola la tabella del DB.
Comincio a disperare sul fatto di poter fare altrettanto con Drupal, anche perché a quanto pare il drupalese è più ostico di quanto pensassi (e dire che un CMS dovrebbe semplificare la vita!).
In alternativa avrei anche pensato di integrare questo sistema come sezione separata di un sito drupal (ovviamente con lo stesso layout), ma poi riuscirei ad integrare un sistema di ricerca nel sito che recuperi i dati anche da queste tabelle "estranee"?
Mi rendo conto di approfittare un po' troppo della pazienza e disponibilità della comunità, ma se qualche anima pia...
Molto bello il sito realizzato da pinolo, ma neppure le sue disquisizioni con bohz (peraltro interessanti) mi sono state di aiuto.
Grazie a tutti
Tiziano

Quello delle relazioni tra contenuti CCK è un campo piuttosto ostico che ho dovuto affrontare anch'io in passato con D5 ed è stato necessario qualche hack per fare funzionare il tutto...
Per D6 ho trovato http://drupal.org/project/nodereferrer_create
Lo avevi già visto? Non ti so dire di più perchè non l'ho mai usato.
In questo intervento si paragonano un pò di alternative
http://groups.drupal.org/node/13162

@dalad: anche io usavo quello; più recentemente ho optato per http://drupal.org/project/nodereference_url molto più elegante secondo me. nello stesso ambito sembrano potenzialmente utili
http://drupal.org/project/cnr
http://drupal.org/project/autocreate

@tiziano: come dicevo nella mia prima risposta, trovo il tuo problema molto stimolante... tempo permettendo spero di postare una soluzione pratica a breve (ammesso che la trovi!).
Al momento sto cogitando sulla possibilità di creare un "quarto" node type, ad es "insegnamento" caratterizzato da una combinazione univoca di
-classe (node reference o vocab)
-insegnante (user reference)
-materia (node ref o vocab)
da qui, con views (visto che sono abbastanza naive con php/mysql), dovrebbe essere possibile filtrare e raggruppare le varie combinazioni per classe, insegnante o materia.
un'altra possibilità sarebbe quella di "rubare" il concetto di "classi" e "attributi" dei prodotti (nodi) di ubercart.
...tutto in teoria, al momento!