by WebSurfer
19. June 2010 15:35
Widget の Tagcloud の中にタグが 3D 空間で回転する WordPress のプラグイン WP-Cumulus を実装しました。
結局、日本語に対応していない Ver. 1.23 の tagcloud.swf を使うのはやめて、WP-Cumulus 作者が試験のために作った Unicode Support 版(詳しくは先のエントリ WP-Cumulus(2) を参照)を使いました。
サイズ、色その他のパラメーター設定は \widgets\Tag cloud\widget.ascx.cs の中にハードコーディングしました。本当はコントロールパネルのようなものを作るといいのですが、とっても面倒だったのでとりあえず今回はやめました。(笑)
その内容は以下の通りで、private const string LINK2 を追加して LoadWidge メソッドの中を書き換えています。これに加えて、widget.ascx に div タグの追加が必要です(id="wpcumulusflashcontent" としています)。
private const string LINK2 = "<a href='{0}' style='{1}'>{2}</a> ";
public override void LoadWidget()
{
string root = BlogEngine.Core.Utils.AbsoluteWebRoot.ToString();
StringBuilder sb = new StringBuilder();
sb.Append("<tags>");
foreach (string key in WeightedList.Keys)
{
string path = "?tag=/" + Utils.RemoveIllegalCharacters(key);
HtmlGenericControl li = new HtmlGenericControl("li");
li.InnerHtml = string.Format(LINK, Utils.RelativeWebRoot + path, WeightedList[key], "Tag: " + key, key);
ulTags.Controls.Add(li);
string size = "10";
switch (WeightedList[key])
{
case "biggest":
size = "13";
break;
case "big":
size = "12";
break;
case "medium":
size = "11";
break;
case "small":
size = "10";
break;
case "smallest":
size = "9";
break;
default:
size = "10";
break;
}
sb.Append(String.Format(LINK2, root + path, size, key));
}
sb.Append("</tags>");
string tagcloud = sb.ToString();
String csname = "WpCumulusScript";
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsClientScriptBlockRegistered(cstype, csname))
{
StringBuilder cstext = new StringBuilder();
cstext.AppendLine("var flashobject = new SWFObject(\"/BlogEngine/tagcloudUnicode.swf\", \"tagcloud\", \"180\", \"170\", \"10\", \"#ffffff\");");
cstext.AppendLine("flashobject.addParam(\"wmode\", \"transparent\");");
cstext.AppendLine("flashobject.addVariable(\"tcolor\", \"0x333333\");");
cstext.AppendLine("flashobject.addVariable(\"tcolor2\", \"0x333333\");");
cstext.AppendLine("flashobject.addVariable(\"hicolor\", \"0xff0000\");");
cstext.AppendLine("flashobject.addVariable(\"tspeed\", \"100\");");
cstext.AppendLine("flashobject.addVariable(\"tagcloud\", \"" + tagcloud + "\");");
cstext.AppendLine("flashobject.write(\"wpcumulusflashcontent\");");
cs.RegisterStartupScript(cstype, csname, cstext.ToString(), true);
}
}
一応動いていますが、使っている tagcloud.swf(上記コードではオリジナル版を区別するために名前を tagcloudUnicode.swf に変えています)は作者によると "highly experimental swf version" だそうですので予期せぬ問題が出るかもしれません。しばらく様子を見ていきたいと思っています。
***************** 2010/6/23 追記 *****************
3D タグクラウド追加後、スクリプトエラーのため (1) コメントが書き込めない、(2) AMPL フィルターが起動できないという問題が IE で発生しました(この後のエントリ reCaptcha が動かなくなりました で書いたのとは別のスクリプトエラーです)。
そのスクリプトエラーを避けるため、Tag cloud 起動用のスクリプトをページの終わりに埋め込むのはやめて(上記のコードがそうなっています)、Tag cloud をレンダリングする HTML コードの中に埋め込むように変更しました。2010/6/23 現在、コードは上記とは異なりますのでご注意ください。詳しい話は後日別途ポストします。
by WebSurfer
19. June 2010 00:03
先のエントリを書いた後、WP-Cumulus 作者の ブログ で、Unicode Support 版と称して、Flash 10 を使用すれば、デバイスフォント使用(らしい)でも埋め込みと同様に動きがスムースで、かすみ効果もあるというデモを見つけました。
その tagcloud.swf をダウンロードして自分でも試してみたところ、確かにそのとおりでした。
Flash Player(Ver. 10 以上)がインストールされてないか JavaScript が無効になっています。
先のエントリでは Ver. 1.23 の tagcloud.swf を使って作業を進めるようなことを書きましたが、考えが変わりました。
作者によると、"highly experimental swf version" とか "I wouldn't recommend using this version in a production website, other than as a test (similar to this post). " とのことで、Ver. 2.0 開発のための試験バージョンのようです。
でも、日本語が使えて、しかもサイズが数 kB と小さく(Ver. 1.23 で 34kB)、動きや表現が埋め込み版と同様というのは大きな魅力です。それを知ってしまった以上、ラテン文字のみの Ver. 1.23 にはもう戻れません。(笑)
作者のブログの記事によると "There is no new version of WP-Cumulus yet, this will be part of version 2.0 if it works reliably." とのことです。それまで待てないし、一応自分なりに問題なさそうなのは確認したので、Unicode Support 版で実装してみることにしました。
もし何か問題があっても、自分のブログの中だけなので大丈夫でしょう、たぶん。(汗)
by WebSurfer
16. June 2010 23:49
タグクラウドが 3D 空間で回転する WordPress のプラグイン WP-Cumulus を BlogEngine.NET ベースの自分のブログにも導入したくて、どうすれば可能か検討していました。
作者のサイト に有益な情報があって、公開されている tagcloud.swf をそのまま利用すれば WP-Cumulus と同様な 3D タグクラウドを BlogEngine.NET で実現するのは難しくないようです。
問題は日本語の表示で、オリジナルの tagcloud.swf は日本語のフォントに対応しておらず、日本
語のタグを設定すると表示されないことです。下の左側がそれです。
Flash Player(Ver. 7 以上)がインストールされてないか JavaScript が無効になっています。
|
Flash Player(Ver. 7 以上)がインストールされてないか JavaScript が無効になっています。
|
フォント埋め込み(オリジナル)
|
デバイスフォント使用(下記注参照)
|
(注)右側の tagcloud.swf は Joomler!.net さんのサイト からダウンロードさせていただきました。有難うございました。
日本語を表示するには以下の3つの方法がありますが、どれも一長一短です。
- フォントを tagcloud.swf に埋め込む。問題はサイズが大幅に増えることで、全部埋め込むと 2MB 近くになり、第一水準に制限しても 700 kB を超えてしまいます。作者も自分の ブログ で言っていますが、そもそもオモチャなのに 700 kB は重すぎます。
- デバイスフォントの使用(埋め込まないで、クライアントの OS のフォントを使う)。上の右側がそれです。数 kB で済むみますが、問題は動きが極端に悪くなることと、後ろに行くほどモヤがかかったようになる本来の表現が失われることです。
- (上記の折衷案として)ひらがなとカタカナのみ埋め込む。オリジナルの倍程度のサイズ(約 70 kB)ですみます。でも、漢字が使えないのでは・・・
オモチャと割り切って、かつ自分的には見栄えが一番大切ということで、とりあえずオリジナルのままのまま進めてみようと思っています。問題は、BlogEngine.NET の Widget にどのように統合するかですね。今度の週末にでもじっくり考えて見ます。