visualizzazioni: raggruppa per prima lettera di risultati


7

Come descrive il titolo, sto cercando di raggruppare i risultati di una vista con la loro prima lettera. Google ha rivelato un modo per me che metà fa il trucco: visualizza il titolo due volte, escludi dalla visualizzazione, limita a 1 (st) carattere, raggruppa per quello. Intelligente, devo ammetterlo, ma devo rivelare un campo di raggruppamento anche se non ci sono risultati come:

A
  Alpha
  Anekin

B
  Bravo
  Borvo
C

D
  Delta
  Dooku

Qualche idea su come procedere?

Risposte:


4

Una soluzione semplice sarebbe quella di aggiungere un campo che contiene solo la prima lettera e il gruppo.

Views supporta anche il glossario, che è un ma diverso, ma consente di raggruppare per la prima lettera e contare il numero di risultati e mostrare fx

A (2) B (2) C (0), come filtro esposto, ciò avviene attraverso contesti nelle viste 3.


"Una soluzione semplice sarebbe quella di aggiungere un campo che contenesse solo la prima lettera e il gruppo." In realtà ho detto che nella mia domanda, ma vedendo come "C" non mi dà alcun risultato e lo voglio ancora presentato non riesco a vedere come questo mi aiuti. Esaminerò il Glossario.
magtak,

1
@magtak Puoi usare i temi per aggiungere lettere mancanti
googletorp

1
potresti per favore approfondire questo?
magtak,

Sto cercando di capire "Una soluzione semplice sarebbe quella di aggiungere un campo che aveva solo la prima lettera". Devo aggiungere un campo nel mio tipo di contenuto e riempirlo con le lettere per ciascun nodo?
brainHax,

1

È stato davvero frustrante, ma alla fine l'ho capito:

Nel file tpl dello stile di output della riga delle visualizzazioni:

<?php print $wrapper_prefix; ?>
  <?php if (!empty($title)) : ?>
    <h3><?php print $title; ?></h3>
  <?php endif; ?>

<?php $letters = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
foreach ($letters as $letter):?>
<div class="letter family">
  <div class="letter-header"><?php print $letter;?></div>
<?php print $list_type_prefix;  ?>
  <?php foreach ($rows as $id => $row):?>
    <?php $rest = substr($view->result[$id]->node_title,0,1);?>
  <?php if ($rest == $letter):?>
        <li class="<?php print $classes_array[$id]; ?>"><?php print $row; ?></li>
      <?php endif;?>
  <?php endforeach; ?>
<?php print $list_type_suffix; ?>
</div>
<?php endforeach;?>
<?php print $wrapper_suffix; ?>

Questo funziona per me dal momento che quella vista ha tutti i suoi risultati, quindi posso tranquillamente supporre che $ view-> result avrà gli stessi elementi di $ righe. $ row afaik è l'output della pagina corrente. Non sono sicuro che il risultato $ view-> si comporti allo stesso modo.


0

Dai un'occhiata a questo articolo in Drupal.org. Spero che ti sia utile, almeno mi abbia aiutato.

http://drupal.org/node/1078962


ci siamo imbattuti durante la mia spedizione su google - non sono riuscito a trovare nulla di utile per il mio problema particolare, ma come ho già detto in precedenza l'ho risolto già :)
magtak,

0

Abbiamo effettivamente aggiunto il codice nella parte "Intestazione" della nostra vista (selezionare il metodo di input per il codice PHP). Ecco il nostro codice php che fa quello che stai cercando (e non richiede un file modello separato).

<?php
  $letters = array(
    'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','y','z'
  );  
?>  
<h2>Browse by Last Name</h2> 
<ul> 
  <li style="display:inline; padding-right:8px;"> 
    <a href="/Full_time_Faculty_Listing" >All</a>
  </li>
  <?php for ($i=0; $i<count($letters); $i++): ?> 
    <li style="display:inline; padding-right:8px;"> 
      <a href="https://drupal.stackexchange.com/Full_time_Faculty_Listing/<?php print $letters[$i];?>"><?php print strtoupper($letters[$i]);?></a>
    </li> 
  <?php endfor; ?> 
</ul>

abbastanza simile alla mia soluzione a tema :)
magtak
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.