Ciao,
sono ai primi passi con Drupal e sto cercando di creare un sito per una libreria. Esiste già una versione "alpha 0" funzionante qui. Quello che sto cercando di fare è mostrare le tassonomie della pagina del tipo libro (Autore, Editore, Generi e Formato) assieme agli altri campi, come mostrato in questa pagina alla sezione "Dettagli del libro". Sto seguendo la strada che spiego più sotto, anche se forse ne esistono di migliori ;)
Il primo passo era mostrare le tassonomie come lista di dati anzichè come tags in fondo alla pagina, e questo sono riuscito a farlo con il modulo *Term Display* ottenendo già un discreto risultato.
Ora vorrei formattare il testo per renderlo uguale alla lista di elementi che segue, e pensavo che il miglior modo fosse di utilizzare l'opzione "Load into $node object" qui descritta e successivamente includere la visualizzazione nel file node-libro.tpl.php che ora appare così:
<div class="Post">
<div class="Post-body">
<div class="Post-inner">
<?php if ($teaser): ?>
<h2 class="PostHeaderIcon-wrapper"> <span class="PostHeader"><a href="<?php echo $node_url; ?>" title="<?php echo $title; ?>"><?php echo $title; ?></a></span></h2>
<?php endif; ?>
<div class="PostContent">
<div class="article">
// IL CODICE ANDREBBE INSERITO QUI
<?php echo $content;?>
<?php if (isset($node->links['node_read_more'])) { echo '<div
class="read_more">'.get_html_link_output($node->links['node_read_more']).'</div>'; } ?>
</div>
</div>
<div class="cleared"></div>
<?php ob_start(); ?>
<?php $metadataContent = ob_get_clean(); ?>
<?php if (trim($metadataContent) != ''): ?>
<div class="PostMetadataFooter">
<?php echo $metadataContent; ?>
</div>
<?php endif; ?>
</div>
</div>
</div>
Sempre nell'handbook ho trovato questa pagina con l'esempio "Definition list by vocabulary" che sembrerebbe fare al caso mio. Ho quindi aggiunto al mio template.php la sezione:
function phptemplate_preprocess_node(&$vars) {
foreach ($vars['node']->term_display as $vid => $vocab_data) {
$meta_dl["vocab_$vid"] = _mytheme_terms_dl_item($vocab_data);
}
// you can add extra DL items here
$vars['meta_dl'] = '<dl>'. implode("\n", $meta_dl) .'</dl>';
## and a helper function to place elsewhere in template.php:
/**
* Helper function to turn term_display loaded terms into DL items.
*/
function _mytheme_terms_dl_item($vocab_data) {
$dt = $vocab_data['vocabulary_name'];
foreach ($vocab_data['terms'] as $tid => $term) {
$term_links['taxonomy_term_'. $term->tid] = array(
'title' => $term->name,
'href' => taxonomy_term_path($term),
'attributes' => array('rel' => 'tag', 'title' => strip_tags($term->description))
);
}
$dd = theme('links', $term_links, array('class' => 'links inline'));
return "<dt>$dt</dt>\n<dd>$dd</dd>\n";
}
}
Mi manca il passo successivo, cioè inserire la variabile nel mio node.tpl.php. Qualcuno mi saprebbe spiegare come procedere?
In alternativa qualcuno mi sa indicare una via migliore per ottenere lo stesso risultato?
Grazie in anticipo ;)
Hai pensato di formattare tutto in node-libro.tpl.php, usando taxonomy_node_get_terms_by_vocabulary per ottenere i termini?
Non la conosco. Mi sai indicare dove trovo la funzione nel manuale o dove trovo esempi?
Grazie :)
UPDATE - ho provato a inserire in node.tpl.php questo esempio che ho trovato:
e il primo 'echo' mi stampa i nomi dei vocabolari, mentre il secondo non stampa niente. $terms rimane apparentemente vuoto e l'if non viene eseguito. Dove sbaglio?
grep -rn "taxonomy_node_get_terms_by_vocabulary" *
modules/taxonomy/taxonomy.module:601
Google "drupal api taxonomy_node_get_terms_by_vocabulary":
http://api.drupal.org/api/function/taxonomy_node_get_terms_by_vocabulary
Google "using taxonomy_node_get_terms_by_vocabulary":
http://thedrupalblog.com/category/tags/taxonomy-node-get-terms-vocabulary
Più imparo, più dubito.
Ora funziona :)
Sembra che la sintassi riportata su tutti gli esempi presenti in rete:
non vada bene nel mio caso: $node->nid non restituisce niente. Devo invece usare:
e tutto funziona alla perfezione. Qualcuno conosce il motivo?
Bene... Ottima dritta Pinolo.
Si. E' la differenza fra Drupal 5 e Drupal 6. Ma mi devi spiegare perchè hai (ri)caricato il nodo... Non basta:
Più imparo, più dubito.
Ops! O_o Hai ragione, non serve ricaricare il nodo. Ho copia-incollato un pezzo di codice che ho trovato senza verificare se fosse tutto necessario.
Ora devo darci sotto con la customizzazione di node.tpl.php. Avete mica qualche buon link in merito che riguardi sia l'ordinamento che il CSS?
Grazie ancora di tutto :)