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

本文へ

tDiaryで、記事毎にツッコミ可否やメインビジュアルの差し替え設定を行う

更新: 2012年10月22日(月) 12:36
公開: 2011年12月26日(月) 00:00

tDiaryに欲しい機能があったのでちょっと作業したときの記録です。結果的には全く大したことではなく、記事毎にメインビジュアルの差し替え設定を行うことについては、trickster2.rbというプラグインで思い通りのことが出来ることをあとで知りました。この記事は記録として残しておきます。

欲しかった機能は、

  • 記事毎にツッコミ可否を設定できる機能。
  • 記事毎に要素(メインビジュアルなど)の記述を挿入できる機能。

です。

記事毎にツッコミ可否を設定できる機能

はてなダイアリーを書き始めたときに、

少しでもコメントを頂きやすくするべく、ブログに書いてみました。

と書いた気持ちは今も変わらないのですが、現在tDiaryで構築中のサイトには、「ツッコミOK」という記事と、「すみません、ツッコミはご遠慮ください」という記事があります。

そこで、tdiary.confで

@hide_comment_form = true

としておいて、

@conf.show_comment = true
@conf.hide_comment_form = false

を実行するプラグインを作って実験してみました。

conf.hide.comment_formの上書きは出来たのですが、conf.show_commentは制御できていません。哀しいかな、ソースコードを見ても目的の箇所が分かりません...。(Windows上のGUI gpreツールで、それらしい文字列で検索してみましたが...。)

コメントの表示の制御は出来なかったのですが、コメントフォームを非表示にしておけば、コメントは入力されないので、結果的には、コメントも表示されません。(ただし、以前に入力されたコメントは表示されてしまいます。)

記事毎に要素(メインビジュアルなど)の記述を挿入できる機能

00default.rbの中の、insertの微修正。冒頭に書いたとおり、trickster2.rbの存在を知った今となっては無用になってしまいました。

はまったポイントは、@modeが 'latest'の場合、さらに、

  • カテゴリが指定されていない場合
  • 存在するカテゴリが指定された場合
  • 存在しないカテゴリが指定された場合

に細分化されること。

これらをどのように区別すればよいかは、tDiary-develメーリングリストにてたださんからご教示いただきました。

ソースコード

# plugin name: insert_if.rb
#
# This plugin supplies a situation-depended insertion.
#
# Original codes are written by TADA Tadashi in 00default.rb
# Copyright (C) 2010, TADA Tadashi
# You can redistribute it and/or modify it under GPL2.
#
# Modified by Fumio KAWAMATA. December 29, 2011.
#
# Arguments
#    file: File name to be inserted. (Default is ''.)
#    mode: 'day', 'category', 'undefined-category', or 'latest' (Default is 'latest'.)
#    articles: article numbers (yyyymmdd style) separated by commma (,) or space.  Default is ''.)
#
def insert_if( file = '', display_mode = 'latest', articles = '' )
	if display_mode != 'day' && display_mode != 'latest' && display_mode !='category'&& display_mode != 'undefined-category' then
		return %Q[<p class="message">insert_if.rb: The display_mode "#{h display_mode}" is not defined.</p>]
	end
	article_no = @date.strftime( '%Y%m%d' )
	insertable = false

	case @mode
		when 'day' # Very simple mode.  tDiary displays only one article.
			if display_mode == 'day' then
				if /#{article_no}/ =~ articles then
					insertable = true
				end
			end
		when 'latest' # Complexed.  Could not judge only this single status.
					  # It has serveral statuses such as:
					  #    (1) Displaying latest serveral articles,
					  #    (2) Displaying categorized articles,
					  #    and (3) Displaying empty article.
			if @cgi['blogcategory'][0] == nil then
				if display_mode == 'latest' then
					# Case (1)
					insertable = true
				end
			else
				# Case (2) or Case (3)
				if !@diaries.empty? && display_mode == 'category' then
					insertable = true
				elsif @diaries.empty? && display_mode == 'undefined-category' then
					insertable = true
				else
					# Nothing to be inserted. The code in the next line is for the debugging purpose.
					# return %Q[<p>@mode: "#{@mode}", display_mode: #{display_mode} @cgi['blogcategory'][0]: #{@cgi['blogcategory'][0]}.</p>]
				end
			end
		end

	if insertable == true then
		begin
			return File::readlines( file ).join
		rescue
			return %Q[<p class="message">#$! (#{h $!.class})<br>cannot read #{h file}.</p>] 
		end
	end
end

(この記事は、http://d.hatena.ne.jp/Fumio_Kawamata/20111226/tDiary_Article_Depended_Setting に掲載していた記事を若干修正したものです。当時は掲載していなかった、ソースコードも掲載しました。)

Tags: tDiary

© Someone in the TERRA

編集