Changeset 2362


Ignore:
Timestamp:
May 29, 2008, 12:39:06 AM (16 years ago)
Author:
plg
Message:

feature 828 added: display tags by letters. Users can switch from "cloud" to
"letters" with a button in the top bar.

Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/config_default.inc.php

    r2339 r2362  
    567567// CSS class tagLevelX.
    568568$conf['tags_levels'] = 5;
     569
     570// tags_default_display_mode: group tags by letter or display a tag cloud by
     571// default? 'letters' or 'cloud'.
     572$conf['tags_default_display_mode'] = 'cloud';
     573
     574// tag_letters_column_number: how many columns to display tags by letter
     575$conf['tag_letters_column_number'] = 4;
    569576
    570577// +-----------------------------------------------------------------------+
  • trunk/tags.php

    r2299 r2362  
    5959$template->set_filenames(array('tags'=>'tags.tpl'));
    6060
     61$page['display_mode'] = $conf['tags_default_display_mode'];
     62if (isset($_GET['display_mode']))
     63{
     64  if (in_array($_GET['display_mode'], array('cloud', 'letters')))
     65  {
     66    $page['display_mode'] = $_GET['display_mode'];
     67  }
     68}
     69
     70$template->assign(
     71  array(
     72    'U_CLOUD' => get_root_url().'tags.php?display_mode=cloud',
     73    'U_LETTERS' => get_root_url().'tags.php?display_mode=letters',
     74    'display_mode' => $page['display_mode'],
     75    )
     76  );
     77
     78// find all tags available for the current user
     79$tags = get_available_tags();
     80
     81// +-----------------------------------------------------------------------+
     82// |                       letter groups construction                      |
     83// +-----------------------------------------------------------------------+
     84
     85if ($page['display_mode'] == 'letters') {
     86  // we want tags diplayed in alphabetic order
     87  usort($tags, 'name_compare');
     88
     89  $current_letter = null;
     90  $is_first_tag = true;
     91  $nb_tags = count($tags);
     92  $current_column_tags = 0;
     93
     94  $letter = array(
     95    'tags' => array()
     96    );
     97
     98  foreach ($tags as $tag)
     99  {
     100    $tag_letter = strtoupper(substr($tag['name'], 0, 1));
     101
     102    if ($is_first_tag) {
     103      $current_letter = $tag_letter;
     104      $letter['TITLE'] = $tag_letter;
     105      $is_first_tag = false;
     106    }
     107
     108    //lettre precedente differente de la lettre suivante
     109    if ($tag_letter !== $current_letter)
     110    {
     111      if ($current_column_tags > $nb_tags/$conf['tag_letters_column_number'])
     112      {
     113        $letter['CHANGE_COLUMN'] = true;
     114        $current_column_tags = 0;
     115      }
     116
     117      $letter['TITLE'] = $current_letter;
     118
     119      $template->append(
     120        'letters',
     121        $letter
     122        );
     123     
     124      $current_letter = $tag_letter;
     125      $letter = array(
     126        'tags' => array()
     127        );
     128    }
     129
     130    array_push(
     131      $letter['tags'],
     132      array(
     133        'URL' => make_index_url(
     134          array(
     135            'tags' => array($tag),
     136            )
     137          ),
     138        'NAME' => $tag['name'],
     139        'COUNTER' => $tag['counter'],
     140        )
     141      );
     142   
     143    $current_column_tags++;
     144  }
     145
     146  // flush last letter
     147  if (count($letter['tags']) > 0)
     148  {
     149    $letter['CHANGE_COLUMN'] = false;
     150    $letter['TITLE'] = $current_letter;
     151    $template->append(
     152      'letters',
     153      $letter
     154      );
     155  }
     156}
     157
    61158// +-----------------------------------------------------------------------+
    62159// |                        tag cloud construction                         |
    63160// +-----------------------------------------------------------------------+
    64 
    65 // find all tags available for the current user
    66 $tags = get_available_tags();
    67161
    68162// we want only the first most represented tags, so we sort them by counter
  • trunk/template/yoga/default-layout.css

    r2352 r2362  
    269269  border: none;
    270270}
     271
     272TR.tagLine {
     273  border-bottom: 1px solid #ddd;
     274  text-align: left;
     275}
     276TR.tagLine:hover {
     277  background-color: #fff;
     278}
     279TD.nbEntries {
     280  text-align: right;
     281  font-style: italic;
     282  font-size: 90%;
     283}
     284
     285FIELDSET.tagLetter {
     286  border: 1px solid #d3d3d3;
     287  width: 200px;
     288  margin: 0.5em;
     289  padding: 10px;
     290}
     291
     292LEGEND.tagLetterLegend {
     293  border: 1px solid #d3d3d3;
     294  font-size:120%;
     295  font-weight: bold;
     296  padding: 0 5px;
     297  color: #555;
     298  font-style: normal;
     299}
     300
     301TABLE.tagLetterContent {
     302  width:100%;
     303  font-size:80%;
     304  border-collapse : collapse;
     305}
  • trunk/template/yoga/tags.tpl

    r2352 r2362  
    44  <div class="titrePage">
    55    <ul class="categoryActions">
     6{if $display_mode == 'letters'}
     7      <li><a href="{$U_CLOUD}" title="{'show tag cloud'|@translate}"><img src="{$themeconf.icon_dir}/tag_cloud.png" class="button" alt="{'cloud'|@translate}"/></a></li>
     8{/if}
     9
     10{if $display_mode == 'cloud'}
     11      <li><a href="{$U_LETTERS}" title="{'group by letters'|@translate}"><img src="{$themeconf.icon_dir}/tag_letters.png" class="button" alt="{'letters'|@translate}"/></a></li>
     12{/if}
     13
    614      <li><a href="{$U_HOME}" title="{'return to homepage'|@translate}"><img src="{$themeconf.icon_dir}/home.png" class="button" alt="{'home'|@translate}"/></a></li>
    715    </ul>
     
    917  </div>
    1018
    11   {if isset($tags)}
     19{if isset($tags)}
     20  {if $display_mode == 'cloud'}
    1221  <ul id="fullTagCloud">
    1322    {foreach from=$tags item=tag}
     
    1726  {/if}
    1827
     28  {if $display_mode == 'letters'}
     29  <table>
     30    <tr>
     31      <td valign="top">
     32    {foreach from=$letters item=letter}
     33  <fieldset class="tagLetter">
     34    <legend class="tagLetterLegend">{$letter.TITLE}</legend>
     35    <table class="tagLetterContent">
     36      {foreach from=$letter.tags item=tag}
     37      <tr class="tagLine">
     38        <td><a href="{$tag.URL}">{$tag.NAME}</a></td>
     39        <td class="nbEntries"><strong>{$tag.COUNTER}</strong> {'photos'|@translate}</td>
     40      </tr>
     41      {/foreach}
     42    </table>
     43  </fieldset>
     44      {if $letter.CHANGE_COLUMN}
     45      </td>
     46      <td valign="top">
     47      {/if}
     48    {/foreach}
     49      </td>
     50    </tr>
     51  </table>
     52  {/if}
     53{/if}
     54
    1955</div> <!-- content -->
Note: See TracChangeset for help on using the changeset viewer.