Sildipilv (tagcloud)

Eks see kõikvõimalikele asjadele siltide kleepimine ole juba ammusest ajast inimloomuses kuid iseäranis just viimasel ajal on see eriti kõvasti väljalöönud - tagging ehk sildistamine ehk millegi märksõnadega varustamine on populaarsust kogunud kõikvõimatutel saitidel, tuntumateks del.icio.us, flickr, digg, jne.com. Mõned sildistamise andmebaasiskeemid on toodud siin. Allpool on kasutusel nimetatud lingil toodud „scuttle“ variant (teine), kuna see on lihtne ja samas piisavalt viisakas. Tabelistruktuur võib olla selline:

 CREATE TABLE `sildid` (
   `idu` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
   `grupi_idu` int(10) UNSIGNED NOT NULL DEFAULT '0',
   `asja_idu` int(10) UNSIGNED NOT NULL DEFAULT '0',
   `nimi` varchar(100) NOT NULL DEFAULT '',
   PRIMARY KEY  (`idu`)
 );

grupi_idu on juhuks, kui soovida erinevatele asjatüüpidele silte lisada, nt linkidele ja artiklitele ja siis …

asja_idu on vastava asja id (artikli või lingi antud juhul)

nimi on sildi tekst Koodijupp sildipilve loomiseks on järgmine (oreilly php hacks raamatust kohandatud variant).

$cloudhtml = '';
 
// leiame kui palju mingit silti esineb
$q = mysql_query('SELECT nimi, COUNT(nimi) AS kokku FROM sildid WHERE grupi_idu=1 GROUP BY nimi');
if(mysql_num_rows($q))
{
	// paneme tulemused massiivi
	while($r = mysql_fetch_assoc($q))
	{
		$wordcounts[$r['nimi']] = $r['kokku'];
	}
 
	// leiame siltide vähima ja suurima arvu
	$min = min($wordcounts);
	$max = max($wordcounts);
 
	$interval = ($max==$min) ? 1 : ($max-$min);
	$ratio = 18.0 / ( $interval );
 
	$wc = array_keys( $wordcounts );
	sort( $wc );
 
	 // loome cloudtagi
	foreach( $wc as $word )
	{
	 	$fs = (int)( 9 + ( $wordcounts[ $word ] * $ratio ) );
 
	 	$cloudhtml .= '<a class="link" href="smileycloud.php?tag='.rawurlencode($word).'" style="font-size:'. $fs .'pt;">' . $word .'</a> &nbsp;';
	}
	// väljastamisel
	echo $cloudhtml;
}

Lihtsaim variant siltide lisamiseks on text tüüpi input, kus need nt komaga eraldada:

php, wiki,sildistamine , tags

Sellisest reast asjade massiivi kupatamiseks võib kasutada järgnevat funktsioonikest:

function tagstr2array($str)
{
	if(!strlen($str))
 		return array();
 
	return array_unique(array_map('trim', array_map('strtolower', explode(',', $str))));
}
 
$tags = tagstr2array($_POST['tags']);
print_r($tags); // array('php', 'wiki', 'sildistamine', 'tags');

Siltide andmebaasi lisamiseks tuleb kõigepealt teada saada asja id-, millele me sildid lisame ning seejärel võib juba sildid baasi lisada:

$res_insert = mysql_query('INSERT INTO tabel_asjad SET 
asjanimi="'.mysql_real_escape_string($_POST['mingi_asi']).'", 
asjalink="'.mysql_real_escape_string($_POST['asjalink']).'"');
 
$lisatud_id = mysql_insert_id($res_insert);
 
// $tags tuleb eelnevast koodilõigust, kui mõni silt on olemas 
// ning asja baasi salvestamine õnnestus
if(count($tags) && $lisatud_id)
{
  // siis käime kõik sildid läbi ja salvestame grupp 1-te 
  // asja_idu-le vastavad sildid
  foreach($tags as $tag)
  {
    mysql_query('INSERT INTO sildid SET 
      grupi_idu=1, 
      asja_idu='.$lisatud_id.', 
      nimi="'.mysql_real_escape_string($tag).'"');
  }
}
 
echo "asi lisatud";
 
tagcloud.txt · Viimati muutnud: 2006/10/05 14:55 (external edit)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki