Per fare ciò che si vuole fare usando Views e non qualche altro modulo contribuito, come Glossario, è necessario definire e tematizzare la propria vista.
Innanzitutto, è necessario creare un nuovo nodo Visualizza. Lo chiamerò myglossary, ma non importa. Assicurati che uno dei tuoi campi sia il titolo del nodo e che sia ordinato per titolo del nodo, in ordine crescente. In altre parole, ordine alfabetico. Presumo che tu stia usando lo stile di riga non formattato (è predefinito), ma probabilmente puoi fare qualcosa di simile con gli altri stili di riga.
Quindi, devi entrare nel tuo tema. Dalla cartella views/theme, copia il modello views-view-unformatted.tpl.php nella cartella del tema che stai utilizzando. Rinominalo in views-view-unformatted - myglossary.tpl.php quindi verrà utilizzato solo per questa vista. Quindi, aprire il file template.php del vostro tema, e aggiungere una funzione di pre-elaborazione:
//Change mytheme to your theme name
function mytheme_preprocess_views_view_unformatted__myglossary(&$vars) {
//If you have the devel module installed,
//this is a great way to see all the available variables
//dpm($vars);
$results = $vars['view']->result;
$rows = $vars['rows'];
//Sort rows into letter sets
$letters = array();
$i = 0;
foreach ($results as $result) {
$first_letter = strtolower(substr($result->node_title, 0, 1));
if (is_array($letters[$first_letter])) {
array_push($letters[$first_letter], $rows[$i]);
}
else {
$letters[$first_letter] = array($rows[$i]);
}
$i++;
}
//Generate glossary navigation
$nav = '';
foreach($letters as $letter => $rows) {
$num = count($rows);
$cap_letter = strtoupper($letter);
$nav .= <<<NAV
<a href="#$letter" class="letter_link">
$cap_letter
</a>
($num)
NAV;
}
//Add to variables
$vars['nav'] = $nav;
$vars['letters'] = $letters;
}
Poi, si dovrà modificare il file di modello è stato copiato nel corso precedenza per aggiungere nella navigazione, e per emettere le righe in uno stile di glossario:
<?php if (!empty($title)): ?>
<h3><?php print $title; ?></h3>
<?php endif; ?>
<?php if (!empty($nav)): ?>
<div id="glossary_nav">
<?php print $nav; ?>
</div>
<?php endif; ?>
<?php foreach ($letters as $letter=>$rows): ?>
<a name="<?php print $letter ?>"></a>
<h4 class="letter">
<?php print strtoupper($letter); ?>
</h4>
<?php foreach ($rows as $id=>$row): ?>
<div class="<?php print $classes[$id]; ?>">
<?php print $row; ?>
</div>
<?php endforeach;?>
<?php endforeach; ?>
Potrebbe essere necessario rigenerare il registro dei temi per visualizzare le modifiche sul sito.
Questo approccio potrebbe funzionare, ma non è necessario farlo. È possibile ottenere lo stesso effetto senza alcun codice personalizzato. – messedup