Tag Cloud for ASP.NET by jQuery
|
|
Пятница, 24 Июля 2009 г. 19:51
+ в цитатник
Ниже я раскажу как написать простенький компонент для отображения облака тэгов в ASP.NET. Пост содержит много кода. Для начала нам потребуется jQuery, который нужно где-нить подключиться на странице. Если Вы не знаете, что такое jQuery - то в поиск. Далее на странице, где у нас будет облако тэгов, а их может быть несколько, подключаем CSS и JS:
Copy Source | Copy HTML- <%@ Register TagPrefix="lsv" TagName="TagCloud" Src="~\Components\_\TagCloud.ascx" %>
- <link rel="stylesheet" type="text/css" href="App_Themes/Basic/tagcloud/tagcloud.css" />
- <script type="text/javascript" src="App_Themes/Basic/tagcloud/tagcloud.js" charset="windows-1251"></script>
Где JS файл содержит следующий код:
Copy Source | Copy HTML- function fontSize(freq, font_min, font_max,total_min,total_max) {
- var size = (freq - total_min)*(font_max - font_min);
- if(total_max-total_min>0){
- size /= (total_max - total_min);
- }
- size += font_min;
- if (size > font_max) size = font_max;
- else {
- if (size < font_min) size = font_min;
- }
- return size + "em";
- }
-
- var iTagCloud = {
- init: function(divName, data) {
- $(document.createElement('ul')).attr("id", "list" + divName).attr("class", "tagList").appendTo("#" + divName);
- //create tags
- $.each(data.tags, function(i, val) {
- //create item
- var li = $(document.createElement('li'));
- //create link
- $(document.createElement('a')).css("font-size",
- fontSize(val.freq, 0.5, 2, data.min,data.max)
- ).text(val.tag).attr({ title: val.freq + " упоминаний",
- target: "_blank",
- href: "http://blogs.yandex.ru/search.xml?text=" + val.tag
- }).appendTo(li);
- //add to list
- li.appendTo("#list" + divName);
- });
- }
- };
Файл стилей на ваше успотрение раставляет цвета, например:
Copy Source | Copy HTML- div.TagCloud { width:90%; background-color:#ffffff;
- text-align:center; padding:0px; overflow:auto; font-size:100%; font-family:arial; }
- ul.tagList { margin:0; padding:0; }
- ul.tagList li { list-style-type:none; float:left; margin:0 3px; height:35px; }
- ul.tagList li a { text-decoration:none; color:#0000FF; }
- ul.tagList li a:hover { text-decoration:underline; color:Red }
Теперь можно перейти к содержимому самого компонента TagCloud.aspx, основная задача которого просто заполнить текст в метку Content:
Copy Source | Copy HTML- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
-
- public partial class Components__TagCloud : System.Web.UI.UserControl
- {
- #region Переменные
-
- DataSet _wordsdata = null;
- String _title = String.Empty;
-
- #endregion
-
- #region Свойства
-
- public DataSet WordsData
- {
- set
- {
- _wordsdata = value;
- }
- get
- {
- return _wordsdata;
- }
- }
-
- public String Title
- {
- set
- {
- _title = value;
- }
- get
- {
- return _title;
- }
- }
-
- #endregion
-
- /// <summary>
- /// Пошла загрузка
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- protected void Page_Load(object sender, EventArgs e)
- {
- Content.Text = "<div id=\"tagCloud"+this.ID+"\" class=\"TagCloud\">";
- if(!String.IsNullOrEmpty(this.Title)){
- Content.Text += "<h3>"+this.Title+"</h3>";
- }
- Content.Text += "</div><br/>";
- if (WordsData != null && WordsData.Tables.Count > 0
- && WordsData.Tables[0].Rows.Count > 0)
- {
- Content.Text += "<script type=\"text/javascript\">";
- Content.Text += "$(function() { " +
- "iTagCloud.init('tagCloud"+this.ID+"', {tags:[";
- int Min = int.MaxValue;
- int Max = int.MinValue;
-
- //пройдемся по всем данным.
- foreach(DataRow dr in WordsData.Tables[0].Rows){
- // $json .= "{tag:'" . $row["tag"] . "',freq:'" . $row["frequency"] . "'}";
- Content.Text += "{tag:'" + dr[0].ToString()+"',freq:'"+ dr[1].ToString()+"'},";
- int freq;
- if(int.TryParse(dr[1].ToString(),out freq)){
- if (freq < Min)
- {
- Min = freq;
- }
- else if(freq > Max)
- {
- Max = freq;
- }
- }
- }
- Content.Text = Content.Text.TrimEnd(',')
- + "],min:'"+Min.ToString()+"',max:'"+Max.ToString()+"'})});"; //закрытие объекта
- Content.Text += "</script>";
- }else{
- Content.Text += "-- недостаточно данных для построения облака слов --";
- }
-
- }
- }
-
-
-
Вот и все, теперь задав DataSet у объекта TagCloud мы получим полноченное облако тэгов. При желании можете написать виджет для замены унылого облака тэгов которое есть в BlogEngine =).
Метки:
blogengine
code
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-