Записи с метками cumulus
Облако тегов на странице ASP.net (wp_cumulus) Flash
27 Январь
Мне лично, да и многим людям понравилось облако тегов на флэше wp_cumulus.
В интернете я нашел всего несколько страниц, которые описывают как сделать такое облако тэгов на ASP.net.
В качестве первоисточника возьмем статью http://dev.net.ua/blogs/eugenekhvedchenya/pages/8134.aspx
(Не уверен, что это первоисточник, но другой статьи под рукой не оказалось)
Итак.
На днях случайно обнаружил очень красивое "живое" облако тегов на флеше:
Само облако тегов написано на флеше, встраивается в страницу с помощью SWFObject, а данные для визуализации берет из набора передаваемых флеш-объекту параметров. Изначально данный плагин предназначался для WordPress, однако мой пытливый ум сразу сказал - "Мне такое надо! Причем на страницах ASP.NET!"
Поразмыслив, я понял что нет ничего невозможного и принялся за работу. Итак, расковыриваем код любой страницы, где есть этот плагин и видим следующее:
text/javascript"> var widget_so9010252 = new SWFObject("tagcloud.swf?r=1510412", "tagcloudflash", "160", "160", "9", "#f8f8f8"); widget_so9010252.addParam("allowScriptAccess", "always"); widget_so9010252.addVariable("tcolor", "0x5391d0"); widget_so9010252.addVariable("tcolor2", "0x333333"); widget_so9010252.addVariable("hicolor", "0x5391d0"); widget_so9010252.addVariable("tspeed", "100"); widget_so9010252.addVariable("distr", "true"); widget_so9010252.addVariable("mode", "tags"); widget_so9010252.addVariable("tagcloud", "....."); widget_so9010252.write("wpcumuluswidgetcontent");Вот и вся магия
Основная проблема была в том, что параметры облака тегов очень плохо документированы, и пришлось немало порыться, прежде чем все заработало так как надо.
Остальное дело техники. Наибольшую трудность вызывает формирование параметра tagcloud, так как туда требуется передать строку с XML особого вида, где все пробелы заменены символом +.
Итак, поехали:
[assembly: WebResource("wpCumulus.swfobject.js", "text/javascript")]
[assembly: WebResource("wpCumulus.tagcloud.swf", "application/x-shockwave-flash")]Флеш-объект и необходимый JS-код встроены в сборку как ресурсы, так что контрол является полностью самодостаточным и не требует для работы никаких дополнительных файлов.
Создаем новый UserControl, который будет уметь рендерить в себе нужный нам JS код:[ToolboxData("")] public class WPCumulus : DataBoundControl { .... protected override void CreateChildControls() { ClearChildViewState(); Controls.Clear(); Page.ClientScript.RegisterClientScriptResource(GetType(), "wpCumulus.swfobject.js"); } protected override void RenderContents(HtmlTextWriter output) { var hiddenContentId = ClientID + ClientIDSeparator + "HiddenContent"; var tagCloud = GenerateTagCloud(); var script = CreateScriptString(tagCloud, hiddenContentId); output.Write(String.Format("", hiddenContentId)); output.Write(""); output.Write(script); output.Write(""); } .... }Как видно из кода, наш класс наследуется от DataBoundControl, что позволяет нам использовать DataBinding для построения списка тегов на основании произвольного источника данных. Для отображения тега в облаке нам необходимы три параметра - Имя Тега, его вес (число ссылок по теме) и ссылка на целевую страницу. За маппинг этих параметров из источника данных отвечают три свойства в классе:
DataTextField - Указывает имя свойства, которое соответствует имени тега.
DataCountField - Указывает имя свойства, которые указывает вес тега.
DataUrlField - Указывает имя свойства, которое соответствует ссылке для данного тега.
Для настройки внешнего вида облака тегов нам доступны следующие параметры:
BackColor - Цвет фона.
TagColor1 - Указывает основной цвет шрифта тега.
TagColor2 - Вспомогательный цвет тега (используется для градиентного перехода при уходе тега на задний план).
HiColor - Цвет тега, когда над ним находится указатель мыши.
TagSpeed - Задает скорость вращения облака (Единицы измерения - попугаи. Оптимальные значения - 20..500 попугаев)
Distr - Булевый параметр отвечает за равномерное распределение тегов по облаку. True - чтобы все было красиво.
MinimumTagSize - Минимальный размер шрифта у тега (для тега с минимальным весом).
MaximumTagSize - Максимальный размер шрифта у тега (для тега с максимальный весом).
Применение контрола:
Сперва опишем наш элемент управления в коде ASPX:<cc1:WPCumulus ID="WPCumulus1" runat="server" DataCountField="Count" DataTextField="Text" DataUrlField="Link" Width="400" Height="400" BackColor="#CCCCCC" HiColor="#66FF33" TagColor1="Red" TagColor2="Blue" Distr="True" />Теперь в файле отделенного кода мы можем привязаться к облаку тегов:WPCumulus1.DataSource = new[]{ new {Text = "Silverlight", Count = 10, Link="/Tags/Silverlight" }, new {Text = "IIS 7", Count = 11, Link="http://iis.net" }, new {Text = "IE 8", Count = 12, Link="/Tags/IE8" }, new {Text = "C#", Count = 13, Link="/Tags/C#" }, new {Text = "Azure", Count = 13, Link="?Tag=Azure" } }; WPCumulus1.DataBind();В результате должно получиться что-то такое:
Приятного использования!
Исходники контрола и демо можно скачать тут: http://flashtagcloud.codeplex.com/
Вместо заключения
Уже после написания контрола нашел в сети аналог для BlogEngine. Но во-первых, их версия заточена под движок и, следовательно, не реюзабельна. Во-вторых написана ногой через голову.
Ограничения Фичи
1) Облако "падает" при большом количестве тегов (Более 400).
2) Не поддерживается кирилица.
Я предлагаю Вам скачать библиотеку wp_cumulus уже с поддержкой кирилицы.

Свежие комментарии