コンピュータ/ソフトウェア関連Tips

本文へ

Blogkit適用のtDiaryで、同一カテゴリーの記事のリストを作成するプラグイン

更新: 2013年06月08日(土) 20:12
公開: 2012年11月03日(土) 00:00

同一カテゴリーの記事のリストを作成するプラグインです。作成したのは2011年11月か12月で、当時、Rubyプログラミングは初めてで、tDiaryプラグインを参考にしてコーディングしたのですが、どなたのコードを参照したか、メモ書きしていませんでした。

ソースコード中に日本語をハードコーディングしたくないので、メッセージを上書きするプラグイン(custom-message.rb 名前は任意)の中で、

def blog_same_category_list_label
	'同一カテゴリーの記事'
end

のようにしています。

# blog_same_category_list.rb
# Modified by Fumio KAWAMATA <fumio@my.email.ne.jp>
# I (Fumio KAWAMATA) refered serveral tDiary plugins, but forgot taking note original copyright information.
# 
# This plugin displays the titles of atricles which category is same with current article.
#

def blog_same_category_list_label
	'Article(s) which category is same as this article'
end
	
def blog_same_category_list
	return '' if @mode != 'day'
	this_date = @date.strftime('%Y%m%d')
	diary=@diaries[this_date]
	return '' if diary.categories.size == 0
	cache = blog_category_cache_restore
	return '' if cache.nil?

	# Count the number of articles which would be shown in the list.
	# (Break if there is at least one article.)
	count = 0
	diary.categories.each do |cat|
		dates = cache[cat].keys.sort
		if !dates.empty? then
			dates.each do |date|
				if date != this_date then
					count = count + 1
				end
				break if count>0
			end
		end
		break if count>0
	end
	return '' if count == 0

	r = "\n"
	r += '<div class="blog-same-category-list-container">'
	r += "\n"
	r += '<div class="blog-same-category-list-label">'
	r += "#{blog_same_category_list_label}</div>\n"
	r += '<ul class="blog-same-category-list-category">'
	r += "\n"
	diary.categories.each do |cat|
		dates = cache[cat].keys.sort
		if !dates.empty? then
			# Count number of articles except myself.
			count = 0
			dates.each do |date|
				if date != this_date then
					count = count +1
				end
			end
			if count > 0 then # In case number of articles exept myself exceeds 1.
				r += '<li class="blog-same-category-list-category">'
				r += "#{cat}\n"
				r += '<ul class="blog-same-category-list-title">'
				r += "\n"
				dates.each do |date|
					if date != this_date then
						r += '<li class="blog-same-category-list-title"><a href="'
						r += "./#{date}.html"
						r += '">'
						r += "#{cache[cat][date]}</a></li>\n"
					end
				end
				r += "</ul>\n</li>\n"
			end
		end
	end
	r += "</ul> <!-- blog-same-category-list-category -->\n"
	r += "</div> <!-- blog-same-category-list-container -->\n"
	return r
end

Tags: tDiary

© Someone in the TERRA

編集