Download & Extend

How to control the levels of the tags in the cloud like li.views-cloud-size-1

Project:Views Cloud
Version:6.x-1.0
Component:Miscellaneous
Category:support request
Priority:normal
Assigned:Unassigned
Status:closed (fixed)

Issue Summary

hello

how can i control the levels of the tags in the cloud "like li.views-cloud-size-1"?
i have a lot with size-1, a few with size-3 and one with size-7.
but this is not comprehensible for me - the steps are very huge ...
how to control the point of change to the next level or how to control the maximum number of sizes?

thanks and greetings momper

Comments

#1

@eaton - maybe a short tip for me?

#2

we hacked a little bit - hardcoded style - maybe it's interesting for somebody (we filter out "Deutschland" - delete this):

<?php
// $Id: views_cloud.module,v 1.3 2008/09/17 16:02:42 eaton Exp $

/**
* @file
* Provide a tag cloud style for views data.
*/

/**
* Implementation of hook_views_api.
* Notifies the Views module that we're compatible with a particular API revision.
*/
function views_cloud_views_api() {
  return array('api' => 2);
}

/**
* Display a view as a cloud.
*/
function template_preprocess_views_cloud_style(&$vars) {
  drupal_add_css(drupal_get_path('module', 'views_cloud') . '/views_cloud.css');

  $view = $vars['view'];

  $result   = $vars['rows'];
  $vars['rows'] = array();

  $handler  = $view->style_plugin;
  $weight_field = $view->style_plugin->options['weight_field'];
  $hide = $view->style_plugin->options['hide_weight_field'];
  $fields   = &$view->field;
  $weight_field_alias = $fields[$weight_field]->field_alias;


  $min = 1000;
  $max = -1000; 
  foreach ($result as $row) {
    $cur = intval($row->{$weight_field_alias});
    if ($min > $cur) {
      $min = $cur;
    }
    if ($max < $cur) {
      $max = $cur;
    }
  }

  foreach ($fields as $field => $column) {
    foreach ($result as $num => $row) {
      if ((!$hide || ($field != $weight_field)) &&
          !empty($fields[$field]) && empty($fields[$field]->options['exclude'])) {
        $field_output = $fields[$field]->theme($row);
        $vars['rows'][$num]['output'] .= $field_output;
      }
    }
  }
 
  foreach ($vars['rows'] as $num => $row) {
    $vars['rows'][$num]['cloud_size'] = _views_cloud_size_helper($result[$num]->{$weight_field_alias}, $min, $max);
    $vars['rows'][$num] = (object)$vars['rows'][$num];
  }

  if (!empty($view->style_plugin->options['randomize'])) {
    shuffle($vars['rows']);
  }
}


/**
* Display a summary view as a cloud.
*/
function template_preprocess_views_cloud_summary_style(&$vars) {
  drupal_add_css(drupal_get_path('module', 'views_cloud') . '/views_cloud.css');

  $view     = $vars['view'];
  $argument = $view->argument[$view->build_info['summary_level']];

  $url_options = array();

  if (!empty($view->exposed_raw_input)) {
    $url_options['query'] = $view->exposed_raw_input;
  }

//print tt_dump($vars['rows']);
 
  // First we take a quick pass through to find the ceiling and floor
  $min = 1000;
  $max = -1000;
  foreach ($vars['rows'] as $id => $row) {
    $vars['rows'][$id]->link = $argument->summary_name($row);
    $vars['rows'][$id]->url = url($view->get_url($view->args), $url_options);
    $vars['rows'][$id]->count = intval($row->{$argument->count_alias});
   
    if (empty($vars['rows'][$id]->link) || $vars['rows'][$id]->link == 'Deutschland') {
      unset($vars['rows'][$id]);
      continue;
    }
 
    $cur = intval($row->{$argument->count_alias});
    if ($min > $cur)
      $min = $cur;
    if ($max < $cur)
      $max = $cur;
  }

  foreach ($vars['rows'] as $id => $row)
  {
      $vars['rows'][$id]->cloud_size = _views_cloud_size_helper($vars['rows'][$id]->count, $min, $max);
  }
}


function _views_cloud_size_helper($value, $min, $max, $sizes = 7) {

  // --- kiezblogs ---
  if ($value <= 1)   return 1;
  if ($value <= 2)   return 2; 
  if ($value <= 4)   return 3; 
  if ($value <= 10)  return 4;   
  if ($value <= 20)  return 5;     
  if ($value <= 40)  return 6;       
  return 7;
  // -----------------
 
/** 
  if ($min == $max) return 1;
  $range = ($sizes - 1) / ($max - $min);
  $value = ($value - $min) * $range ;
  return (intval($value + 1));
**/ 
}

#3

Status:active» fixed

This was caused by the same bug as #321038: Always "views-cloud-size-7". Items are now forced to be distributed between 1 and 7, as opposed to all sticking around the same number.

#4

Status:fixed» closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

nobody click here