/** * answer the tag cloud html * * @param object Iterator $tags * @param optional string $viewAction The action to use when clicking on a tag. * Usually view or viewuser * @param optional array $styles An array of style-strings to use for various * levels of of tag occurrances. * @param optional array $additionalParams An array of parameters to pass in the same namespace * @param optional array $additionalNamespacedParams A two-dimensional array. Keys of the top * array are the namespaces, the values of the top array are arrays * of key/value pairs in that namespace. * @return string * @access public * @static * @since 11/7/06 */ static function getTagCloud($tags, $viewAction = 'view', $styles = null, $additionalParams = null, array $additionalNamespacedParams = array()) { ob_start(); if ($tags->hasNext()) { $harmoni = Harmoni::instance(); $harmoni->request->startNamespace("polyphony-tags"); $tagArray = array(); $occArray = array(); $nameArray = array(); $tag = $tags->next(); $tagArray[] = $tag; $nameArray[] = $tag->getValue(); $occArray[] = $tag->getOccurances(); $minFreq = $maxFreq = $tag->getOccurances(); while ($tags->hasNext()) { $tag = $tags->next(); $tagArray[] = $tag; $nameArray[] = $tag->getValue(); $occArray[] = $tag->getOccurances(); if ($tag->getOccurances() < $minFreq) { $minFreq = $tag->getOccurances(); } if ($tag->getOccurances() > $maxFreq) { $maxFreq = $tag->getOccurances(); } } if (!is_array($styles)) { $styles = TagAction::getDefaultStyles(); } // First Try to get a meaningful Standard Deviation $incrementSize = TagAction::deviation($occArray); // If there are only two results, try this method if (!$incrementSize) { $incrementSize = ceil(($maxFreq - $minFreq) / count($styles)); } // If we still don't have an increment size, use 1 if (!$incrementSize) { $incrementSize = 1; } // printpre(TagAction::average($occArray)); // printpre($incrementSize); array_multisort($nameArray, $tagArray); for ($key = 0; $key < count($tagArray); $key++) { $tag = $tagArray[$key]; $group = -1; for ($i = $minFreq; $i <= $tag->getOccurances() && $group < count($styles) - 1; $i = $i + $incrementSize) { $group++; } $group = max(0, $group); $style = $styles[$group]; $url = $harmoni->request->mkURL('tags', $viewAction); if (RequestContext::value('agent_id')) { $url->setValue('agent_id', RequestContext::value('agent_id')); } if (is_array($additionalParams)) { foreach ($additionalParams as $name => $value) { $url->setValue($name, $value); } } foreach ($additionalNamespacedParams as $namespace => $params) { $harmoni->request->startNamespace($namespace); foreach ($params as $name => $value) { $url->setValue($name, $value); } $harmoni->request->endNamespace(); } $url->setValue("tag", $tag->getValue()); print "\n\t<a rel='tag' href='" . $url->write() . "' "; print " title=\""; // print $group." "; // print str_replace('%2', $tag->getValue(), // str_replace('%1', $tag->getOccurances(), // _("View (%1) items tagged with '%2'"))); print str_replace('%2', $tag->getOccurances(), str_replace('%1', $tag->getValue(), _("View items tagged with '%1'. ") . "(" . _("Frequency") . ": %2)")); // span styles cloudStyle, rel and frequency NOT validating print "\" style='" . $style . "'"; print " class='tag_cloud_group_" . $group . " tag_frequency_" . $tag->getOccurances() . "'"; print ">"; print $tag->getValue() . "</a> "; } $harmoni->request->endNamespace(); } return ob_get_clean(); }