Salve. Da un pò di tempo mi sto dedicando all'approfondimento di Drupal, e sto cercando di creare un mio template per un sito sportivo come esercitazione. In passato ho avuto esperienze con Joomla.
Veniamo al dunque, dopo aver imparato come si aggiungono nuove regioni vorrei capire come si posso fare per renderle collassabili. Ad esempio, considerando un layout a 3 colonne, vorrei che in caso di assenza della regione destra, la regione centrale aumentasse la sua grandezza riempiendo lo spazio lasciato vuoto dalla regione mancante. Chi mi da una mano ? Grazie anticipatamente
Emanuele
Anch'io sto cercando una soluzione simile.
Il problema è assegnare al div "content" due diverse classi. Con Joomla è possibile scrivere un'istruzione php (ad esempio classe_contenuti) all'interno del div interessato. Es. div id=" < ?php echo $classe_contenuti; ? >".
Quindi con le istruzioni if, and or, di php (che già usiamo per scrivere i template drupal) si gestiscono le regioni collassabili. Nella logica: se esiste regione sx, assegna la classe "content"; altrimenti scrivi la classe "content_esteso".
Il problema che mi pongo è se possa funzionare con drupal.
Per drupal ho trovato una soluzione analoga ideata da artisteer: http://www.artisteer.com/?post_id=104273&p=forum_post
ma non l'ho ancora sperimentata e ha la caratteristica di applicarsi (almeno nell'esempio) al body.
Non conosco il php, ma qualche programmatore potrebbe dirimere la questione.
Online ho trovato anche questo articolo. http://drupalsn.com/learn-drupal/drupal-tutorials/drupal-theming-tips-an...
Verso la fine, si fa cenno a una soluzione che lavora sulla page-front che peraltro farebbe al caso mio.
Pare che la soluzione esista a partire da drupal 6.
Bisognerebbe studiarsi il tema acquia marina che dispone di regioni collassabili. Se trovo la soluzione condividerò.
Ti ringrazio per essere intervenuto, purtroppo sulla rete non riesco a trovare niente di chiaro.
Io sto cercando di analizzare il tema Bartik che anch'esso dovrebbe avere regioni collassabili, ma trovo riferimenti alle varie dimensioni del content soltanto nel css. Nel file page.tpl.php non c'è niente che crei le voci presenti nel css
Ieri sera ho trovato anche questi due articoli:
http://drupal.org/node/970154
ma soprattutto
http://drupal.org/node/679478#comment-2453736
Purtroppo, forse la stanchezza, o forse il non aver centrato il problema, non ho capito bene la logica del secondo link che ho postato.
Vorrei sperimentare una soluzione adattata dall'articolo che ho postato ieri:
http://drupalsn.com/learn-drupal/drupal-tutorials/drupal-theming-tips-an...
(il punto 4 è il passaggio che mi sembra più interessante).
Purtroppo non ho avuto tempo di fare dei test, e spero di riuscire al più presto, perché finché non metto in pratica non mi rendo conto di quello che succede.
I passi teorici dovrebbero essere:
1) creare le varie classi per dimensionare i box come meglio ci pare (e fin qui spero che ci siamo)
2)richiamare la funzione nel page.tpl.php (funzione che verrà eseguita dal file template.php).
3) scrivere la funzione nel file template.php (se non c'è crearlo).
partiamo dal tutorial:
crea la funzione
Premesso che non capisco niente di php, qui dovrebbe dire: se left e right non esistono, scrivi la classe sidebars (che nel template ha definito con una larghezza a 980px.
else {
if ($sidebar_left != '') {
$class = 'sidebar-left';
}
if ($sidebar_right != '') {
$class = 'sidebar-right';
}
}
Qui invece imposta le condizioni per la presenza di una delle due barre laterali (sx e dx).
poi chiude con una istruzione che non conosco, ma dovrebbe servire a stampare la classe:
if (isset($class)) {
print ' class="'. $class .'"';
}
}
? >
Tra l'altro in una pagina di documentazione ufficiale (purtroppo ho perso il link), riferita alla personalizzazione delle briciole di pane, raccomanda di non chiudere i tag php se si va a creare un nuovo template.php dalla 6 in poi. Quindi occhio anche a questa cosa, perché il tutorial è per la 5.
Se fin qui è tutto corretto, per avere solo una colonna collassabile, dovrei semplicemente eliminare le istruzioni riferite alla colonna che non mi interessa.
Devo solo avere un attimo di tempo per provare questa soluzione. Il problema è anche che con drupal bisogna fare tanta tanta esperienza, però consente cose che sinceramente ho visto solo nei CMS aziendali.
Il dubbio che mi pongo è: perché nel tutorial scrive la classe nel body? questa funzione è applicabile anche a un qualunque div, oppure il body del page.tpl.php è un elemento diverso dal body del template.php (file di core, non del tema)?
Spero non sia una domanda scema, perché con la versione 7 nella conversione di una pagina html in un file php, l'elemento body va eliminato e immagino perché la page.tpl viene sovrascritta.
Speriamo di venirne a capo.
A.
Anch'io non ne capisco molto di php, ma a quanto pare, ma per la maggior parte delle cose più semplici come lavorare sulla temizzazione di un tema, non è necessario essere grandissimi esperti, il linguaggio php è abbastanza semplice da leggere, credo sia più importante imparare a conoscere bene a fondo Drupal e a sapere dove mettere precisamente le mani per ogni cosa che va fatta, e queste cose si imparano solo con l'esperienza e con il tempo giocando parecchio e facendo parecchi esperimenti.
Comunque credo di essere vicino alla soluzione grazie a questo link
http://api.drupal.org/api/drupal/includes!theme.inc/function/template_preprocess_html/7
Non so ancora di preciso cosa fare, ma almeno ho trovato la parte del codice dove è dichiarata la regola php che decide il layout a 1, 2 o 3 colonne in bartik o cmq nelle impostazioni predefinite.
Ancora non ho provato alcun metodo perché mi si sono accavallate un sacco di cose, tuttavia, mi sa che ci stavamo arrovellando su nulla.
Infatti, una volta che si scrive un template per drupal utilizzando gli if statements prima dell'apertura di un div e dopo la chiusura di questo, se semplicemente il modulo non c'è, il sistema non dovrebbe proprio scrivere il div. O sbaglio?
Suggerimenti di qualche esperto?
Ciao
vi state incartando in una cosa molto semplice!
Da quello che ho capito, volete semplicemente visualizzare la regione se è presente un qualche blocco al suo interno.
Nel file page.tpl.php del vostro tema basta questo piccolo codice:
dove mia_regione è il nome della regione che avete date nel file .info
Fatto questo (e pulito la cache di Drupal) la regione verrà visualizzata unicamente se c'è qualche blocco all'interno.
;)
No gioppy a quello ci ero arrivato. La cosa è un pò più complessa, praticamente quando una colonna sparisce perchè mancano moduli al suo interno, la regione centrale dei contenuti deve essere più grande e riempire lo spazio lasciato vuoto
Ah, ok...
quello lo devi fare via CSS: devi impostare le larghezze dei vari div in percentuale o em e non in px, così se manca una colonna viene tutto riadattato.
;)
Credevo si trattasse di codice PHP con nome regione CONTENT diverso a seconda del numero di colonne...