Ciao a tutti!
Ho notato che se inserisco del contenuto nel body tramite i "div"(e non solo... con PHP abilitato...) che va a richiamare alcune classi o id che si trovano nell' "head" del documento Drupal legge tranquillamente tutto, anche se i contenuti stessi non sono "inquadrati" in una struttura html "head e body"; è normale? ...qualcuno mi saprebbe spiegare il perchè?
Qui sotto un esempio del codice che ho inserito in una pagina (Page) e che Drupal legge e stampa a video correttamente nonostante non ci sia nessun Tag che racchiuda i tag "style" in particolare (spero di essermi spiegato):
<style>
.button_ex {
width: 293px;
height: 55px;
}
.button_ex a {
display: block;
width: 293px;
height: 55px;
background: url(iscriviti.png) no-repeat top left;
}
.button_ex a:hover {
background-position: top right;
}
.contenitore {background-image:url(bg.gif); padding:0px; border: 1px solid #CCCCCC; margin-left:3px; width:100%; height:700px; }
#div_01 {clear:both; width:250px; height:155px; border:1px solid blue; margin-left:auto; margin-right:auto; }
#div_02 {clear:both; width:293px; height:55px; border:1px solid blue; margin-left:auto; margin-right:auto; margin-top:20px; }
#div_03 {clear:both; width:250px; height:155px; border:1px solid blue; margin-left:auto; margin-right:auto; margin-top:20px; }
</style>
<div class="contenitore">
<div id="div_01">Data</div>
<div id="div_02" class="button_ex"><a href="/user/register"></a></div>
<div id="div_03">Data</div>
</div>
P.S. Secondo lo standard Drupal è un tipo di inserimento corretto oppure è meglio evitare?
Ho provato naturalmente anche inserendo i Tag "body e head" ma, se visualizzo il codice sorgente della pagina in Firefox si vanno ad aggiungere a quelli già presenti e risulterebbe una pagina con i "body e gli head" duplicati... boh... spero che qualcuno mi faccia sapere qualcosa, tanto per chiarirmi questa faccenda un po strana.
Si, si... i Template Suggestion li uso, ma volevo appunto chiarire questo fatto sull'inserimento di pagine "al volo".
Qualche suggerimento/consulenza?
Grazie
Ciao
Kipper
Ne abbiamo discusso indirettamente di recente, ma credo che vale la pena rispondere in pieno alla tua domanda, per togliere certi incomprensioni...
Iniziamo stabilendo certi termini, in modo di creare meno confusione. La pagina (Page) alla quale referisci, io chiamerò nodo (anche perchè lo è), mentre la pagina HTML lo chiamerò documento HTML.
Un documento HTML comprende due elementi importante, come avevi notato,
<head>
e<body>
. Essenzialmente il<head>
conteine metadati del documento, mentre il<body>
contiene i dati (testo per la maggior parte) del documento.E poi ci sono tanti altri elementi che aiutano a populare questi due elementi - ma certi elementi possono aparire in uno solo di questi, altri in entrambi. L'elemento
<style>
e uno di quelli che può essere messo solo nel<head>
. Se sofri di insognia, la W3C fornisce una gamma di documenti con le specifiche delle diverse versioni di HTML, gli elementi, le loro attributi, e dove possono stare: http://www.w3.org/ e più specificamente http://www.w3.org/html/ e http://www.w3.org/MarkUp/ e http://www.w3.org/Style/CSS/. Personalmente non resisto più di un mezz'oretta alla volta...In realtà possiamo scrivere quello che vogliamo nel nodo - Drupal si ne frega (o meglio non fa nessun controllo). Lui si interessa estrarre l'informazione dal nodo ed inserirlo nei template per arrivare al risultato, cioè un documento HTML.
Nel tuo esempio, chiedevi dove stavano i tag (o elementi) che racchiudano (beh, dicevi che non c'erano) e la risposta è che stanno nel template page.tpl.php. E li che trovi
<head>
e<body>
ed anche<html>
per quello. Il contenuto del nodo finisce dentro l'elemento<body>
del documento HTML.Ma sfortunatamente
<style>
non è permesso nel<body>
(vedi http://www.drupalitalia.org/node/10280#comment-33064 per altri link in materia) quindi non devi metterlo nel nodo. Stessa cosa ovviamente con<head>
o<body>
, come hai già sperimentato.Il vero problema sta con il browser. O meglio con i primi implementazioni dei browser. O meglio che le prime specificazioni non erano sufficientemente, er, specifiche. Diverso ad un compilatore o interprete, che sgrida come un pazzo se metti una virgola fuori posto (literalmente), il browser prosegue, tentando di visualizzare 'qualcosa' anche nel peggiore degli ipotesi, anche con errori nella struttura del documento assurdi, come mettere
<body>
prima del<head>
, o mettere due<head>
ecc, ecc, ecc.Sfortunatamente, proprio perchè continua a visualizzare qualcosa, è difficile accorgersi che un errore c'è. Per questo esistono dei validatori (sia per HTML, che per CSS - che ha altri problemi), vedi per esempio quelli del W3C: http://www.w3.org/QA/Tools/#validators
Ma se il browser corregge i nostri sbagli, che problema c'è? E' semplice: la correzione di un browser e diverso a quello di un altro. IE correge diversamente di Firefox, o Opera o Safari o Chromium. Anzi IE6 correge diversamente a IE7 o IE8. Risultato: meglio non lascirli corregere, quindi meglio non fare errori. Già senza errori, i browser fanno cose sbagliati, non serve rendere la nostra vita più difficile.
Più imparo, più dubito.
Grazie John,
...allora, da quanto ho capito, per questi tipo di "nodi", anche se fosse solo uno (per la Home Page in questo mio caso specifico, dove ho dei pulsanti Rollover che richiamano la pagina di iscrizione alla Newsletter etc etc...), bisogna creare un CTYpe dedicato e lavorare con Template Suggestions es:
- node-home_page_custom.tpl.php (per il contenuto del "body")
- page-node-home_page_custom.tpl.php (per il contenuto dell' "head")
...e scegliere ovviamente l'opzione "Pubblica in Prima Pagina".
E' questo lo standard da seguire per questi tipi di contenuti giusto?
P.S. Naturalmente posso creare un nodo con PHP abilitato e con tutti i Tag della struttura HTML ma poi, quando vado a vedere il Sorgente Pagina in Firefox, vedo i "body e gli head" duplicati... almeno, mi sembra di ricordare...
Ok, comunque una cosa strana mi è successa (creando un nodo con i Tag "sciolti" come descritto nel mio post #1) e se possibile, vorrei sapere se esiste una spiegazione, tanto per sapere cosa e come tratta i nodi drupal nonchè cos'è successo dentro Drupal stesso.
Dopo aver creato il nodo (e pubblicato in Prima Pagina...) con al suo interno diversi pulsanti Rollover implementati con immagini *.png; per i quali ho creato una cartella es: "mie_immagini_pulsanti" nella root, per una serie di motivi ho dovuto rifare il tutto e, per una coincidenza (nel senso che al menu rimaneva assegnato il percorso vecchio es "node/1210" dei Rollover..), nonostante il fatto di aver cancellato dalla root la cartella che conteneva tute le immagini, queste continuavano ad apparire...
Sembrerebbe che Drupal abbia memorizzato da qualche parte queste immagini! ..si si, naturalmente avevo provveduto a "svuotare" anche la Cache, ma le immagini continuavano ad apparire anche se la cartella che le conteneva l'avevo eliminata dal server... cosa mooolto strana!
Come si potrebbe spiegare questa cosa?
Grazie
Ciao
Kipper
Mi sa che sei un pò fuori fase, oggi...
Qualunque tipo di contenuto è un nodo.
Hai solo bisogno di creare page-tipo-di-contenuto.tpl.php se hai bisogno di cambiare l'aspetto in qualche modo. Altrimenti node.tpl.php e page.tpl.php vanno più che bene. Poi non credo che page-tipo-di-contenuto.tpl.php verrà visto da Drupal, page-front.tpl.php però si (ma solo sul home page).
page.tpl.php scrive il
<html>
,<head>
e in parte il<body>
node.tpl.php riempie il 'buco' lasciato da page.tpl.php (nel
<body>
del documento) con i dati dal nodo - titolo e corpo come minimo.Ti ricordi bene. Nel nodo poi usare solo elementi che sono permessi nel
<body>
. Quello che puoi creare, e quello che è corretto, non sono sempre la stessa cosa.Proviamo ;-)
Oooh...
Cache del browser?
Più imparo, più dubito.
mmm... si si, hai ragione, oggi sono fuori fase... ma sul serio, vabbeh, capita... ho scritto il post in un momento che avevo casini famigliari e, tra una cosa e l'altra ho scritto un sacco di scemenze...
Grazie ancora John..
Ciao
Kipper