Blog にアップロードしたイメージファイルを自動でサムネイル化してくれる Thumbnailer ですが
デフォルトではすべてのサムネイルが \AppData\files\Thumbnails\ フォルダに保存されてしまいます

これではサムネイルが同じフォルダにひたすらたまってしまって困るので
コードを少しいじって普通のイメージのように保存した年月ごとにフォルダ分けされるようにコードを書き換えます

書きかえる個所は static Thumbnailer() にある absoluteThumbnailPath のパス取得設定です。
ここは通常 "/files/" + ThumbnailPath になっているのですが、これを以下のように年月を付け加えるように変更します。 
また作例されたサムネイルを参照するタグの生成部分も、同様に年月を加えるように変更します。

    static Thumbnailer()
    {
        absoluteThumbnailPath = HttpContext.Current.Server.MapPath(BlogSettings.Instance.StorageLocation + "/files/" + DateTime.Now.ToString("yyyy/MM") + "/" + ThumbnailPath + "/");
    }

    private static HtmlImageTag CreateThumbnail(HtmlImageTag tag, Dictionary<string, string> thumbnailSettings)
    {
    //....
        thumbnailTag.Source = Utils.RelativeWebRoot + "image.axd?picture=/" + DateTime.Now.ToString("yyyy/MM") + "/" + ThumbnailPath + "/" + HttpUtility.UrlEncode(newFilename);
    //....
    }

これでめでたくサムネイルを保存するパスが変更されて
元のイメージが保存されているフォルダのサブフォルダとしてサムネイルを管理できます

Currently rated 3.3 by 6 people

  • Currently 3.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Thumbnail Extension

2008-11-09

BlogEngine.NET 定番な感じの自動サムネイル作成エクステンションを入れてみました。

インストール方法は Extension のコードファイルを \AppCode\Extension\ にコピーするだけです。
あとはイメージをアップしたときにイメージの html を編集して、

<a href="ファイル名.jpg[thumb:height=200,link=original]" />

といったように href 属性内にサムネイルのサイズやリンク方法を指定すると
自動的にサムネイルを作成して \AppData\files\Thumbnail\ に保存、
そのサムネイルを本文に表示して、元のイメージへリンクしてくれます。

http://blog.data-worx.de/page/Extension-Thumbnailer.aspx

Currently rated 3.0 by 189 people

  • Currently 3.015872/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Indigo テーマを使っていると、日付の表示がなじみのない形式になってしまうので、
テーマを直接書き換えて表示される日付フォーマットを変更しました。

/themes/indigo/ に PostView.ascx と CommentView.ascx があるので、

// 日本では使われない形式
DateCreated.ToString("MMMM yyyy dd, HH:mm") 

// 標準的な24時間表示
DateCreated.ToString("yyyy-MM-dd HH:mm")

と変更して、日付の表示を変えてみました。

Currently rated 2.4 by 148 people

  • Currently 2.425675/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

BlogEngine.NET 1.4.5.7 だと、Indigo テーマにバグがあってタイトル名の表示が変になってしまいます

これはテーマの中で呼び出しているめそっとが間違っているので、
ここを1箇所直せばひとまずタイトルは問題なく表示されます。

直すコードは /themes/indigo/PostView.ascx です

<!-- Post.Title が UrlEncode() されている -->
<h1><a class="postheader taggedlink" href="<%=Post.RelativeLink %>"><%=Server.UrlEncode(Post.Title) %></a></h1>


<!-- Post.Title を HtmlEncode() に変更する -->
<h1><a class="postheader taggedlink" href="<%=Post.RelativeLink %>"><%=Server.HtmlEncode(Post.Title) %></a></h1>

Currently rated 2.8 by 9 people

  • Currently 2.777778/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

BlogEngine.NET 1.4.5.7 は、なぜか Web.Config で CustomErrors Mode="Off" なため、
デフォルトで用意されているエラーハンドリング用ページが使われていません

そこで Web.Config を書き変えてカスタムエラーを有効にし、
さらに .Text からの移行で起きている /archive/ 配下のエラーをハンドルするため、
コードを少し書き変えました。

書き変えたのは error404.aspx.cs で、
PageLoad() メソッドの最初で "/post/" を調べているところを、OR条件で "/archive" も調べるようにして、
これにヒットしたらダイレクトにサーチをかけて、該当トピックの候補が表示されるようにしました。

// 元のメソッド
if (Request.QueryString["aspxerrorpath"] != null && Request.QueryString["aspxerrorpath"].Contains("/post/"))

// 書き変えたメソッド
if (Request.QueryString["aspxerrorpath"] != null && (Request.QueryString["aspxerrorpath"].Contains("/post/") || Request.QueryString["aspxerrorpath"].Contains("/archive/")))

Currently rated 2.6 by 80 people

  • Currently 2.55/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

BlogEngine.NET 付属の BlogML インポートアプリがかなりバカなんじゃないか疑惑

BlogEngine.NET でエクスポートしたちゃんとした BlogML を再度読み込ませると
BlogML で指定されているいろいろな設定を全部無視してインポートするようだ

Slug や Tags もしっかり全部無視するし、Last Modified なんかは西暦1年だし
なんかかなりいやーんな状態になることが判明

しょうがないので直接 Posts の XML ファイルをなめて書きかえるコードを書いてしまった(死

Currently rated 3.0 by 5 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

BlogML

2008-09-09

BlogEngine.Net に移行するために .Text のデータベースを
無理やり BlogML に変換して、BlogEngine に取り込んでみました

どうやって BlogML にするか悩んだ結果、
.Text のデータベースを SQL Server 2005 に入れていたので、
T-SQL 1本勝負で強引に BlogML 直接出力をしてみました(爆
# 細かく言うと、CDATA がうまく出なかったので、ちょっとC#コードで変換しましたが

Single Blog なことを前提にしているとか、いくつか決め打ちにしているところがあるのですが
とりあえずちゃんと BlogML な形で XML がでてきます(笑
# 探りながら作った手抜きコードなので汚いのはご愛敬...

/**
[PostType]
1 = Entry
2 = Article
3 = Comment
4 = Trackback
**/

DECLARE @BlogID int
DECLARE @AuthorPrefix int
DECLARE @CategoryPrefix int
DECLARE @RootUrl nvarchar(100)

SET @BlogID = 0
SET @AuthorPrefix = 0
SET @CategoryPrefix = 20000

SET @RootUrl = '/blog/'

SELECT @RootUrl As [root-url], GETDATE() As [date-created],
'http://www.w3.org/2001/XMLSchema' As [xmlns:xs],
(SELECT 1 As [Tag], NULL As [Parent], site.Title As [title!1!!cdata] FROM blog_Config site WHERE site.BlogID = @BlogID FOR XML EXPLICIT, TYPE),
(SELECT 1 As [Tag], NULL As [Parent], subtitle.SubTitle As [sub-title!1!!cdata] FROM blog_Config subtitle WHERE subtitle.BlogID = @BlogID FOR XML EXPLICIT, TYPE),
(SELECT BlogID + @AuthorPrefix As [id], LastUpdated As [date-modified], 'true' As approved, Email As [email],
(SELECT 1 As [Tag], NULL As [Parent], Author As [title!1!!cdata] FROM blog_Config authortitle WHERE author.BlogID = authortitle.BlogID FOR XML EXPLICIT, TYPE)
FROM blog_Config As author
FOR XML AUTO, TYPE) As [authors],
(SELECT category.CategoryID + @CategoryPrefix As [id],
(SELECT 1 As [Tag], NULL AS [Parent], Title As [title!1!!cdata] FROM blog_LinkCategories c2
WHERE c2.Active = 1 AND category.CategoryID = c2.CategoryID
FOR XML EXPLICIT, TYPE)
FROM blog_LinkCategories As category
WHERE category.CategoryType = 1
FOR XML AUTO, TYPE) As categories,
(
SELECT post.ID As id, post.DateAdded As [date-created],
 post.DateUpdated As [date-modified],
 @RootUrl + 'post/' + CAST(post.ID as nvarchar(1000)) + '.aspx' As [post-url],
 'true' As approved,
 CASE WHEN PostType = 2 THEN 'article' ELSE 'normal' END As [type], 'false' As [hasexcerpt],
(SELECT (vc.WebCount + vc.AggCount) As [views] FROM blog_EntryViewCount As vc WHERE vc.EntryID = post.ID AND vc.BlogID = @BlogID) As [views],
(SELECT 1 As Tag, NULL AS Parent, title.Title As 'title!1!!cdata' FROM blog_Content As title WHERE title.ID = post.ID FOR XML EXPLICIT, TYPE),
(SELECT 1 As Tag, NULL AS Parent, contents.Text As 'content!1!!cdata' FROM blog_Content As contents WHERE contents.ID = post.ID FOR XML EXPLICIT, TYPE),
(SELECT 1 As Tag, NULL AS Parent, title.Title As 'post-name!1!!cdata' FROM blog_Content As title WHERE title.ID = post.ID FOR XML EXPLICIT, TYPE),
ISNULL((SELECT category.CategoryID + @CategoryPrefix As ref FROM blog_Links As category WHERE category.PostID = post.ID FOR XML AUTO, TYPE), (SELECT MIN(CategoryID) + @CategoryPrefix As ref FROM blog_LinkCategories As category FOR XML AUTO)) As categories,
ISNULL((SELECT tag.Title As ref FROM blog_Links As category INNER JOIN blog_LinkCategories As tag ON category.CategoryID = tag.CategoryID WHERE category.PostID = post.ID FOR XML AUTO, TYPE), (SELECT tag.Title As ref FROM blog_LinkCategories As tag WHERE tag.CategoryID IN (SELECT MIN(CategoryID) As ref FROM blog_LinkCategories) FOR XML AUTO)) As tags,
(SELECT comment.ID As id, DateAdded As [date-created], DateUpdated As [date-modified], 'true' As approved, Author As [user-name], Email As [user-email], TitleUrl As [user-url], (SELECT 1 As Tag, NULL AS Parent, title.Title As 'title!1!!cdata' FROM blog_Content As title WHERE title.ID = comment.ID FOR XML EXPLICIT, TYPE), (SELECT 1 As Tag, NULL AS Parent, contents.Text As 'content!1!!cdata' FROM blog_Content As contents WHERE contents.ID = comment.ID FOR XML EXPLICIT, TYPE) FROM blog_Content As comment WHERE comment.ParentID = post.ID AND PostType = 3 FOR XML AUTO, TYPE) As comments,
(SELECT trackback.ID As id, DateAdded As [date-created], DateUpdated As [date-modified], 'true' As approved, TitleUrl As [url], (SELECT 1 As Tag, NULL AS Parent, title.Title As 'title!1!!cdata' FROM blog_Content As title WHERE title.ID = trackback.ID FOR XML EXPLICIT, TYPE) FROM blog_Content As trackback WHERE trackback.ParentID = post.ID AND PostType = 4 FOR XML AUTO, TYPE) As trackbacks,
(SELECT authorid.BlogID + @AuthorPrefix As ref FROM blog_config As authorid WHERE authorid.BlogID = @BlogID FOR XML RAW('author'), TYPE) As authors
FROM blog_Content As post
WHERE (PostType IN (1, 2))
FOR XML AUTO, ROOT('posts'), TYPE
)
FOR XML RAW('blog')

Currently rated 2.5 by 4 people

  • Currently 2.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

BlogEngine.Net

2008-09-09

Blogを今までの .Text と Community Server からBlogEngine.Net に移行しました

いろいろと軽いバグがコードに含まれていたりして
それをちょこちょこ直して無事にリニューアルです

まだ日本語化していないですが、それもぼちぼち直してみる予定

Currently rated 3.0 by 40 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5