Tag Cloud

4 posts by 2 authors in: Forums > CMS Builder
Last Post: October 28, 2011   (RSS)

By ryanGT - October 27, 2011

Hi all,

i was just wondering how i would go about creating a tag cloud from one field across multiple tables?

I have two tables called Reviews and Features, both of which have a text field called page_keywords. I would really like to use the information in these fields to create a tag cloud.

I have tried a few things but to no avail, (including left join, and array merge) im sure that the php explode function will have to be involved somewhere, but everything i try doenst seem to work.

I think that array merge is the correct way to go, and would really appreciate some help.

Many thanks

Re: [ryanGT] Tag Cloud

By Jason - October 27, 2011

Hi,

There are a number of different method for creating tag clouds. However, you first need to get an array of all of your "tags" along with a count of how frequently they occur.

In this example, you first create an array of all the sections you want to use and which field in each you tags are stored in. This script assumes that the tags in each field are separated by commas. It is also assumed that you are using CMSB version 2.08 or greater:

$tagsToCount = array();
$sectionsToField = array('reviews' => 'page_keywords', 'features' => 'page_keywords');

foreach($sectionsToField as $sectionName => $fieldName) {

//get section records
$records = mysql_select($sectionname);

foreach ($records as $record) {
//turn field into an array of values
$tags = explode(",", @$record[$fieldName]);

// add tags to the count array
foreach ($tags as $tag) {
$tag = trim($tag);
if (!$tag) { continue; } // skip empty array values

if (array_key_exists($tag, $tagsToCount)) {
$tagsToCount[$tag]++;
}
else {
$tagsToCount[$tag] = 0;
}
}

}

}


At the end of this code, you'll have an array called $tagsToCount where the index of an array element is the tag and the value is the number of times it appeared.

At the end of this you can use this code:
showme($tagsToCount);
to view the structure of the array.

Hope this helps get you started.
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/

Re: [ryanGT] Tag Cloud

By Jason - October 28, 2011

Hi Ryan,

When going through this array, each tag will only appear once, even if it's counted multiple times.

The problem you were probably encountering with getting the tags out of the array, is that the tags are actually the array indexes, not the values. You can try this after the previous code executes.

This example extracts all the tags into an array, randomizes the array, and then outputs the first 5 tags:

//extract tags from the array
$tags = array_keys($tagsToCount);

//randomize tags
shuffle($tags);


$maximumResults = 5;
$resultCount = 0;

foreach($tags as $tag) {

echo $tag;

if (++$resultCount == $maximumResults) {
break;
}

}


Hope this helps
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/