Ciao a tutti!
Il sito che sto realizzando si avvale del tema zen e vorrei personalizzare il node-inner relativo ai node promossi in home page
lasciando inalterato l'aspetto dei node nelle pagine interne e purtroppo non ho esperienza nella programmazione in php...
Ho creato in zen.css una classe node-inner-index, poi ho individuato node.tpl.php il cui codice inizia così:
<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?>"><div class="node-inner">
come faccio a far si che lo stesso nodo in home page richiami la classe node-inner-index e nelle pagine interne richiami
la classe di default node-inner?
Ringrazio chi potrà essermi d'aiuto!
zen.css:
.node-inner /*classe di default senza valori perchè il node si adatta al content*/
{
}
.node-inner-index /*classe aggiunta da me che andrebbe richiamata in php solo per l'homepage*/
{
width:335px;
margin-right:15px;
float:left;
}
(il content dei nodi è largo 700px sia in home page che nelle pagine interne)
Ci sono parecchie variabili disponibili dentro node.tpl.php, uno delle quale è
$is_front
. Il<front_page>
corrisponde al URLhttp://www.example.com[/codefilter_code]
/
, normalmente considerato l'home page. Quindi scrivendo questo al'inizio del template:<?php
if ($is_front) {
$all_classes = $classes .' node-inner-index';
}
else {
$all_classes = $classes;
}
?>
ti permette di usare
$all_classes
invece di$classes
dove tu vuoi che la classe CSS.node-inner-index
viene inserito. Nel caso che il nodo non è sul front page,$all_classes
è identico a$classes
...Nel tuo esempio specifico:
<?php print $node->nid; ?>" class="<?php print $all_classes; ?>">
Più imparo, più dubito.
in
template.php
ottieni una classe aggiuntiva
.classe-che-identifica-i-nodi-promossi
per la div del nodo promosso.NOTA: in ZEN di default il titolo è FUORI dalla suddetta div quindi questo sistema funziona se:
a) lo stile non lo devi applicare al titolo
b) hai page e node .tpl.php con il titolo all'interno della suddetta div
[edit]: rileggendo il post mi sono accorto che volevi stylare tutti i nodi in prima pagina e non solo quelli esplicitamente promossi.
la soluzione è già presente in zen: la body class
.front
. e quindi per stylare l'elemento.node-inner
solo per la homepage avrai:.front .node-inner{
width:335px;
margin-right:15px;
float:left;
}
Certified to Rock
Se vedi che sono un programmatore...
Più semplice di cosi... +1 @bohz...
Più imparo, più dubito.
hehe...la necessità fa virtù!
CSS si impara anche top->bottom, ma i linguaggi di programmazione no (a parte reverse engeneering, ma quello richiede troppo tempo)..
Sapessi quanto vorrei essere programmatore anche io!
...per ora sto seguendo questo corso - fatto molto bene, devo dire.
Certified to Rock
Grazie mille ad entrambi !!
era più semplice di quanto pensassi ;)
Al rischio di dirottare questo thread...
Come tutte le cose, si parte con un modello (anche un pò vaga) per poi approffondire le dettaglie...
a[href$=".pdf"] {
background: url(pdf.gif) no-repeat left 50%;
padding: 2px 0 2px 20px;
}
(Smashing magazine)
E' molto facile...Comunuqe per C, vedi il "white book" K&R2. Se invece vuoi divertirti (ed imparare un pò di Ruby), vedi "Why's (Poignant) Guide to Ruby" di Why the Lucky Stiff.
Più imparo, più dubito.
grazie, John.
in passato avevo dato un'occhiata al libro di why_ (a proposito, è riapparso o è sparito definitivamente?), ma mi sono spaventato un po'...
..in realtà avrei fretta di imparare php per cominciare a fare sul serio (eh, è una storia lunga, magari te la racconto a Crema).
Conoscevo quella tecnica CSS, non ho capito perchè la hai citata però...scusa, pochi neuroni ancora disponibili...
;)
Certified to Rock
PROBLEMA SPAZI BIANCHI
Riprendo da qui per chiedervi aiuto su un problema che si è generato facendo la modifica sopra indicata,
il sito è questo: http://www.gps-standard.com/gps/ (vedi sotto il filmato flash)
in home page sono riuscito a spostare su due colonne la visualizzazione dei nodi, ora il problema è che rimangono dei grossi spazi bianchi
quale soluzione potrei adottare per farli scomparire?
de3vi dimensionare il div contenitore;
sposta il float e la dimensione (consiglio di cambiarla in 50% o 49%) nella div superiore ovvero .node-teaser, e lascia solo margin in .node-inner
Certified to Rock
Ho apportato le modifiche, ma il problema rimane..
per il momento ho impostato un' altezza fissa al .node-teaser (350px) ma ho paura che in futuro con testi di lunghezza diversa i nodi si accavallino.
E con Garland come potrebbe essere la modifica del file node.tpl.php?
@sonia: per fare cosa?
@kastal: non vedo più nodi in home; comunque secondo me devi dimensionare in modo appropriato il div contenitore (in percentuale); non è mai una buona idea dimensionare in altezza blocchi con contenuto variabile, lasciali liberi o usa il modulo equalheights (o js/css equivalente)
Certified to Rock
Io utilizzo Garland come tema di drupal e vorrei personalizzare la visualizzazione delle news in home page (fatte con taxonomy + cck + viste) ho quindi provato a modificare il mio node.tpl.php inserendo il codice suggerito sopra in questo modo:
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?><?php
if ($is_front) {
$all_classes = $classes .' node-inner-index';
}
else {
$all_classes = $classes;
}
?>">
Ovviamente ho aggiornato anche il css:
.node-inner /*classe di default senza valori perchè il node si adatta al content*/
{
background-color:#0F0
}
.node-inner-index /*classe aggiunta da me che andrebbe richiamata in php solo per l'homepage*/
{
background-color:#FF0
}
Ma purtropop non vedo le modifiche. Potrebbe essere perchè il mio sito è caricato in una sottocartella www.miosito.it/new?
In ogni modo non mi prende il colore di background nè nella pg iniziale nè nelle pagine interne.
hai pulito la cache o il theme registry (visitando admin/build/themes)?
Certified to Rock
Si!
Di solito io vado nelle configurazioni di garland > modifico > salvo le modifiche e mi si aggiorna tutta la parte grafica
Non hai copiato correttamente quel snippet di codice...
Prova con questo (modificato per gli altri parametri):
<?php
$all_classes = $classes;
if ($is_front) {
$all_classes .= ' node-inner-index';
}
if ($sticky) {
$all_classes .= ' sticky';
}
if (!$status) {
$all_classes .= ' node-unpublished';
}
?>
<div id="node-<?php print $node->nid; ?>" class="node<?php print($all_classes); ?>">
Non l'ho testato, ma dovrebbe funzionare...
Più imparo, più dubito.
pulisci la cache in admin/settings/performance (in fondo alla pagina).
poi aggiusta quel css: chiudi le istruzioni con un punto e virgola e sposta i commenti sopra i selettori
/*classe di default senza valori perchè il node si adatta al content*/
.node-inner{
background-color:#0F0;
}
/*classe aggiunta da me che andrebbe richiamata in php solo per l'homepage*/
.node-inner-index{
background-color:#FF0;
}
controlla che le classi che hai inserito nel tpl.php siano stampate effettivamente nell'html
controlla che il file css sia caricato (si vedono le tue regole con firebug?)
...vedi anche il suggerimento di John ;)
Certified to Rock
Ho provato con equalheights.. risolve un po' il mio problema anche se con i testi brevi lascia degli spazi bianchi..