Aiuto personalizzare node-tipo_di_contenuto.tpl.php

20 contenuti / 0 new
Ultimo contenuto
Aiuto personalizzare node-tipo_di_contenuto.tpl.php

Mi date un mano sulla scelta di come procedere...
Ho un tipo di contenuto con tantissimi campi cck e ovviamente vorrei personalizzare la vista magari raggruppando i campi e meeterli inline, come potete immaginare per evitare di avere un nodo infinito come per esempio:
foto
nome
cognome
via
indirizzo
cap
città
prov
tel
fax
cel
email
...

per farla breve, cercando nel forum ho trovato come da titolo, di utilizzare il file node-tipo_di_contenuto.tpl.php.
Il problema è che ho trovato solo come personalizzare i vari campi come es:

<div class="immagini">
<?php
print $node->field_foto[0][$view];
 
?>

</div>

ma quando hai 15 campi o più, immagini multiple e magari ti tocca aggiungere uno odue campi devi andare a mettere mano di nuovo al file tpl.
Domanda? Posso inserire funzione tipo:

<?php
foreach ($fields ...) {
      print
$field...;
 
?>

se si, nel file tpl o dove? Come posso fare a dividere in gruppi separati in dati anagrafivci, dati di contatto e immagini.
Qualcuno di voi ha affontato e risolto cosi oppure esiste un'altra strada?

Ciao,
per iterare i campi con n inserimenti basta usare questo codice:

<?php
$count
= count($node->field_foto);
for(
$i = 0; $i < $count; $i++){
print
$nodo->field_foto[$i]['view'];
}
 
?>

Basta inserirlo nella porzione di codice nel quale devi visualizzare i campi (devi vedere tu, secondo la grafica e il template).
Per la seconda domanda:
Quote:
Come posso fare a dividere in gruppi separati in dati anagrafivci, dati di contatto e immagini.

non ho capito cosa intendi. Intendi raggruppare più campi?

Giusto, un cilco for sull'array field_foto!

Quote:
Come posso fare a dividere in gruppi separati in dati anagrafivci, dati di contatto e immagini.

ho una serie di campi nome cognome ... e una serie di single on-off checkbox, vorrei creare due colonne :

nome: pippo           |               single     |
cognome: pluto        |               conugato   |
...

Per creare due colonne, l'unica è riscrivere l'html e visualizzare il contenuto del campo nella colonna 1 o nella colonna 2.

M.

--
Michel 'ZioBudda' Morelli -- [email protected]
Sviluppo applicazioni CMS DRUPAL e web dinamiche -- Corsi Drupal -- Amministrazione Drupal -- Hosting Drupal

Sono daccordo con ziobudda...
Drupal NON regala nulla - per questi tipi di lavori bisogna procedere mattoncino per mattoncino quindi:
Costruire un impianto/pagina con i DIV in locale - basta 1 file *.html; + 1 file *.css; (oppure mettere il *.caa; tra HEAD e HEAD del file *.html;)

Qui ci sono delle info a riguardo... sempre che abbia capito bene...
http://www.drupalitalia.org/node/11774#comment-39996

Magari qualcuno ha una soluzione più sbrigativa... benvenga!

Già che ci sono vorrei esporre un quesito che mi trascino da tempo:

Quando dico che bisogna sostituire la variabile <?php print $content ?> da così:

<div class="content clear-block">
    <?php print $content ?>
  </div>

a così (ovviamente è un esempio indicativo...):

<div class="content clear-block">
<div id="contenitore">
<div id="padre">
<div id="box1">
...
</div>
<div id="box2">
...
</div>
</div>
</div>
</div>

...so benissimo che potrei inserire tutto il mio template (struttura con DIV...) nel Body con filtro settato su PHP ma poi, mi ritroverei una pagina con, oltre alla mia struttura personalizzata, anche i Field CCK in coda!!!

Allora chiedo:
E' possibile rendere invisibili/nascondere la "stampa" a video dei Field CCK - quelli sciolti/isolati uno sotto l'altro??? ...allora si che potrei lasciare <?php print $content ?> in node-mio_ctype.tpl.php ed inserire tutto il codice nel Body!!!

Qualche esperto ha una soluzione?

Spero di essermi spiegato

Grazie

Ciao a tutti
kipper

Allora, vorrei fare un pò di chiarezza almeno per quanto mi riguarda perchè da novellino non riesco a strvi dietro.
Grazie ziobudda, ma cosa intendi:

Quote:
Per creare due colonne, l'unica è riscrivere l'html e visualizzare il contenuto del campo nella colonna 1 o nella colonna 2.

dove? quando? inserire l'html come ho fatto nell'esempio del file miocontenuto.tpl.php div, class ...:
<div class="immagini-inline">
<?php
print $node->field_foto[0][$view];
?>

</div>

oppure bisogna intervenire altrove?
Kipper grazie anche a te per l'intervento, mi sa che stiamo dicendo la stessa cosa.
Cerco di spiegarmi, se usiamo:
<?php
 
print $content;
?>

visualizziamo tutto.
oppure:
<?php
 $count
= count($node->field_foto);
for(
$i = 0; $i < $count; $i++){
print
$nodo->field_foto[$i]['view'];
}
print
$content;
?>

mi ritrovo prima le immagini, poi tutti i campi e di nuovo le immagini in fondo.

Come faccio a lavorare sui singoli campi per piazzarli dove voglio e come voglio con html e css?
Non so se mi sono spiegato bene... è quello cheintendevi anche tu kipper?

OK Dok79,

Devi sostituire completamente (in node-mio_ctype.tpl.php nella cartella del tuo Tema) quello che segue (che sarebbe il responsabile della visualizzazione del "nodo" di "Default") da così:

<div class="content clear-block">
<?php print $content ?>
</div>

a così:

<div class="content clear-block">
<?php
$field_cck_01
$node->field_cck_01[0]['view'];
$field_cck_02 $node->field_cck_02[0]['view'];
?>
 
<div id="contenitore">
<div id="box1">
<?php print($field_cck_01 ? $field_cck_01 : ' '); ?>
</div>
<div id="box2">
<?php print($field_cck_02 ? $field_cck_02 : ' '); ?>
</div>
</div>
</div>

P.S. L'ultimo DIV è la chiusura di <div class="content clear-block"> (tanto per essere un pò pignolo...)

Credo ci sia tutto il necessario per comprenderne il funzionamento...

Va da sè che con questo sistema puoi piazzare i DIV dove e come vuoi tu, aggiungere intestazioni "statiche" oltre che visualizzare i Field CCK etc etc etc... In poche parole, puoi fare tutto ciò che vuoi - Puoi anche per esempio inserire in un DIV il codice per visualizzare una View (in inglese si dice "Insert Views Programmatically")??? ...e molti altri elementi (Blocchi - QuickTabs etc... sempre Programmatically...)

Nell'esempio, nei DIV ho usato gli ID ma, ovviamente puoi usare/aggiungere anche le Classi...

Questo è il mio modo di intendere il "Theming" in Drupal ...sempre secondo me.

Ciao
Kipper

Perfetto! Siamo a metà del'opera. Grazie kipper!
Qui nasce il mio problema:
- come faccio a stampare e controllare i campi del content, non ho trovato le variabili? tipo $title e gli altri?
li ho cercati su drupal.org ma non sono stato capace (i campi dei cck li conosco perchè li ho inseriti es. field_foto_tessera )

- non c'è modo di renderlo dinamico con dei gruppi , in modo da non mettere le mani al file tutte le volte che si inserisce un nuovo campo cck es. sesso M/F. Non utilizzando un ciclo for o foreach group_filed_personal ...

... se ho detto delle stupidate corrreggimi pure e che mi sembra strano che non ci sia un modo per rendere il file dinamico.

Mah... io di solito, quando devo aggiungere dei nuovi field CCK modifico di conseguenza anche node-mio_ctype.tpl.php ...non penso che una volta creato il template si debba ricorrere spesso ad apportare modifiche...

Per quanto riguarda le Variabili, sinceramente NON ho mai avuto nè l'occasione nè la necessità di inserirle per ciò che mi riguarda fino a questo momento...

Quote:

Doc79 wrote:
non c'è modo di renderlo dinamico con dei gruppi , in modo da non mettere le mani al file tutte le volte che si inserisce un nuovo campo cck es. sesso M/F. Non utilizzando un ciclo for o foreach group_filed_personal ...

Non saprei :-(

Comunque sarebbe interessante approfondire l'argomento... se qualche esperto si facesse avanti, proseguirebbe questo tutorial...

Ciao
Kipper

Ma scusa, le variabili di cui parli non le puoi pescare in page.tpl.php e in node.tpl.php ???

es.

<div id="titolo">
<?php print $title ?>
</div>

Ciao
kipper

Doc79 wrote:
Perfetto! Siamo a metà del'opera. Grazie kipper!
Qui nasce il mio problema:
- come faccio a stampare e controllare i campi del content, non ho trovato le variabili? tipo $title e gli altri?
li ho cercati su drupal.org ma non sono stato capace (i campi dei cck li conosco perchè li ho inseriti es. field_foto_tessera )

- non c'è modo di renderlo dinamico con dei gruppi , in modo da non mettere le mani al file tutte le volte che si inserisce un nuovo campo cck es. sesso M/F. Non utilizzando un ciclo for o foreach group_filed_personal ...

... se ho detto delle stupidate corrreggimi pure e che mi sembra strano che non ci sia un modo per rendere il file dinamico.


Ciao,
1) Se vuoi avere accesso a tutte le variabili di $node basta che fai questo (tra il tag pre):
<?php
 print_r
($node);
?>

Le varie variabili le richiami con il solito metodo, ad esempio per il titolo:
<?php
 
print $node->title;
?>

2) purtroppo no, a meno che non lascia la visualizzazione di default dei nodi!
;)

continua a sfuggirmi qualcosa, se come dice gioppy usando print ($node) ho tutto il nodo e non posso controllare la posizione e l'ordine, giusto?
Poi se controllo i singoli field_... comunque ho il duplicato con $node che non posso impedirgli di visualizzarli.
Mentre il secondo metodo lo già visto, ma non conosco le altre variabili enon sono riuscito a trovarle in rete, -> title ok, corpo non è ->body.
Ho anche notato che quando usi altri moduli che aggiungono qualche campo nel nodo che usi come fai a recuperare il valore del campo?

Forse il modulo devel visulizza le variabili dei moduli core e non???

Doc79 wrote:
continua a sfuggirmi qualcosa, se come dice gioppy usando print ($node) ho tutto il nodo e non posso controllare la posizione e l'ordine, giusto?
Poi se controllo i singoli field_... comunque ho il duplicato con $node che non posso impedirgli di visualizzarli.
Mentre il secondo metodo lo già visto, ma non conosco le altre variabili enon sono riuscito a trovarle in rete, -> title ok, corpo non è ->body.
Ho anche notato che quando usi altri moduli che aggiungono qualche campo nel nodo che usi come fai a recuperare il valore del campo?

Forse il modulo devel visulizza le variabili dei moduli core e non???


Attenzione,
per vedere tutto l'albero dell'array di $node devi utilizzare la funzione print_r non print;
<pre><?php print_r($node); ?></pre>
Detto questo, se vuoi visualizzare solo ed unicamente il body del contenuto (e quindi senza campi aggiuntivi) basta fare una cosa del genere:
<?php
 
print $node->content['body']['#value'];
?>

(non avevo capito se era questo il tuo problema o meno)!

ciao gioppy,
interessante questo tuo ultimo script, diciamo che lo cercavo da tempo... inserire e visualizzare nel body tutto il codice xhtml impedendo ai campi cck di farsi vedere a meno che non vengano specificatamente richiamati dal codice inserito nei DIV... è questo il suo scopo giusto?

quindi in node-my_ctype.tpl.php la situazione cambia da così (di default...):

<div class="content clear-block">
<?php print $content ?>
</div>

a così:

<div class="content clear-block">
<?php print $node->content['body']['#value']; ?>
</div>

avevo aperto un post qualche mese fa sulla questione ma non avevo ottenuto nulla...

non vedo l'ora di testarlo... appena ho delle news farò sapere...

inoltre, mentre con il mio metodo posso/potevo solo visualizzare (altrimenti c'era da impazzire con le variabili) i campi decisi da me, in questo modo, vengono anche stampate/i tutte le funzionalità di eventuali moduli aggiuntivi... un esempio che mi viene in mente cosi al "volo" sono le 5 stelle del modulo "FiveStar" ...bene!!!

Grazie

Ciao
Kipper

Quote:

Attenzione,
per vedere tutto l'albero dell'array di $node devi utilizzare la funzione print_r non print;
<?php
 print_r
($node);
?>

Grazie gioppy, la stanchezza ... oltretutto print_r è una funzione di php
print_r --  Stampa informazioni relative al contenuto di una variabile in formato leggibile
Bene!
c'è abbastanza per smanettare, come dice kipper è stato costruttivo questo post.
Facciamo delle prove e poi magari mettiamo degli esempi per renderlo completo.
A più tardi.

Ottima e interessante discussione... come dicevo prima, appena ho delle news le pubblico...

Ciao
Kipper

Ciao,
sono contento che l'argomento sia di interesse! :D

Per quanto riguarda la visualizzazione del solo corpo, diciamo che in tutti i progetti che ho fatto ho sempre avuto la necessità di separare il solo corpo da tutto il resto... solitamente, i campi vanno inseriti in posizioni molto differenti da sotto il copro, e, in alcuni casi, con visualizzazioni molto particolari!

Quote:
un esempio che mi viene in mente cosi al "volo" sono le 5 stelle del modulo "FiveStar" ...bene!!!

Se non ricordo male, Fivestar lo puoi richiamare con una cosa del genere:
<?php
 
print $node->field_five[0]['view'];
?>

passando il 'view', lui gia ti dovrebbe inserire la visualizzazione finale!
;)

jhl.verona wrote:
Ci sono due variabili: $page e $teaser. Vedi la documentazione per node.tpl.php.

Se hai Devel installato ed abilitato, basta mettere

<?php
 dsm
($node);
?>
per vedere tutte le proprietà di $node. Altrimenti puoi mettere
<?php
 
print('<pre>'); print(check_plain(print_r($node, TRUE))); print('</pre>'); 
?>

[Corretto]
Quando il nodo viene visualizzato 'in pieno' (tipo node/123) esiste la proprietà booleano $page e $node->content['body']['#value'] contiene il testo formattato del corpo.

Quando il nodo fa parte di una lista (front page o vista) allora esiste la proprietà booleano $teaser e $node->content['body']['#value'] contiene il testo abbreviato e formattato del corpo.
[/Corretto]
(Grazie Carlo)


cercando, cercando ho trovato questo post di jhl.verona, grande! mi era sfuggito!
ho provato print(''); print(check_plain(print_r($node, TRUE))); print('');
viene visualizzato tutto chiaro, ci lavoro sopra...

Bastava un link no? Così gli altri possono vedere l'intero thread...

Più imparo, più dubito.

vedo desso il post di John e Bohz che mi era sfuggito > http://www.drupalitalia.org/node/11144#comment-36441

in ogni caso grazie a tutti quelli che hanno tirato fuori sto script!

Ciao
Kipper