File: HOWTO-make-plugin.html

package info (click to toggle)
tdiary 2.0.1-1sarge1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 7,220 kB
  • ctags: 1,667
  • sloc: ruby: 20,044; lisp: 476; makefile: 91; sql: 32; sh: 31
file content (269 lines) | stat: -rw-r--r-- 18,514 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja-JP">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
	<meta name="Author" content="TADA Tadashi">
	<link rev="MADE" href="mailto:sho@spc.gr.jp">
	<link rel="INDEX" href="http://www.tdiary.org/">
	<meta http-equiv="content-style-type" content="text/css">
	<link rel="stylesheet" href="doc.css" type="text/css" media="all">
	<title>tDiary: How to make plugin</title>
</head>
<body>
<h1>tDiary<br><span style="font-size:medium">ץ饰κ</span></h1>

<p><strong>ץ饰λȤˤĤƤϡ<a href="HOWTO-use-plugin.html">HOWTO-use-plugin.html</a>򻲾ȤƤ</strong></p>

<p>ץ饰tDiary 1.3.1ʹߤǻȤ褦ˤʤäƥ˵ǽɲäȤߤǤץ饰<a href="http://www.tdiary.org/">tDiary.org</a>ꤹ뤳ȤǤޤޤtDiaryե륻åȤѤƤˤϡmisc/pluginǥ쥯ȥñȤۤƤΤƱΤΤޤޤƤޤ.rbե򡢥ե뤴ȥ󥹥ȡˤpluginǥ쥯ȥ˰ư뤳ȤǡѤǤ褦ˤʤޤ</p>

<p>ץ饰ˤϤޤޤʤΤޤ˼ưŪ˲ʸꡢüʽ򤵤ΤŪǤޤΥץ饰뤳ȤǡtDiaryΥå򥫥ޥ뤳ȤǤޤ</p>

<p>ʲǤϡץ饰ˤĤƤΡֺפޤʤ.rbեΤȤ֥ץ饰եסºݤǸƤӽФƻȤǽ(RubyΥ᥽å)ΤȤ֥ץ饰פȸƤӤޤҤȤĤΥץ饰եϡʣΥץ饰ޤߤޤ</p>

<h2>ץ饰μ</h2>

<p>ץ饰ϡRubyΥ᥽åɤˤʤäƤޤΥ᥽åɤϥץ饰Plugin饹Υ᥽åɤȤɤ߹ޤ졢եκǸʳǸƤӽФޤץ饰᥽åɤʸ֤줬Τޤޤ뤳Ȥˤʤޤ</p>

<p>¦鸫ץ饰ϡ3ढ褦˸ޤҤȤĤ<a href="#custom">ޥϥץ饰</a>ǤξˤǤޤƤơ˶Ū˸ƤӽФޤǥեȥץ饰ˤƤǤƤơƱ̾Υץ饰뤳Ȥưѹ뤳ȤǤΤǤƼå䡢ա󥫡HTMLإåץ饰󤬤ˤޤ</p>

<p>2ܤΥץ饰ϡ<a href="#original">ꥸʥΥץ饰</a>ǤإåեåʸԤտŪ˵Ҥ뤳ȤǸƤӽФޤϥǥեȤǤ̤ǡ¸Υץ饰֤̾ʤ¤깥̾ΤˤǤޤץ饰󽸤˼ϿƤץ饰ϡƤǤ</p>

<p>3ܤΥץ饰<a href="#callback">Хåϥץ饰</a>ǤϸƤӽФ꤬ޤäƤǥޥϥץ饰˻Ƥޤ᥽åɤˤϤʤäƤ餺ʸ֤֥åɲäƤޤ˸ƤӽФץ饰䡢ʸ˸ƤӽФץ饰HTMLإåɲäץ饰Ǥޤ</p>

<p>ʹߤǡ餽줾Υץ饰κˤĤޤ</p>

<h2><a name="custom">ޥϥץ饰</a></h2>

<p>ʸ˸åʸ¿ϡץ饰ˤäƺޤƤޤ줾Υåбץ饰뤳Ȥǡå򥫥ޥǤΤǤץ饰ΤäȤñʤΥޥ򤳤줫鸫Ƥޤ</p>


<p>ޥǽʸϡǥեȥץ饰ȤƤ餫ʲΤ褦Ƥޤ</p>


<pre>
def no_diary; "#{@date.strftime( @conf.date_format )}Ϥޤ"; end
def comment_today; 'Υĥå'; end
def comment_total( total ); "(#{total})"; end
def comment_new; 'ĥåߤ'; end
def comment_description; 'ĥåߡȤФɤ! E-mailɥ쥹ϸޤ'; end
def comment_description_short; 'ĥå!!'; end
def comment_name_label; '̾'; end
def comment_name_label_short; '̾'; end
def comment_mail_label; 'E-mail'; end
def comment_mail_label_short; 'Mail'; end
def comment_body_label; ''; end
def comment_body_label_short; 'ʸ'; end
def comment_submit_label; ''; end
def comment_submit_label_short; ''; end
def comment_date( time ); time.strftime( "(#{@date_format} %H:%M)" ); end
def referer_today; 'Υ󥯸'; end

def navi_index; 'ȥå'; end
def navi_latest; 'ǿ'; end
def navi_update; ""; end
def navi_preference; ""; end
def navi_prev_diary(date); "(#{date})"; end
def navi_next_diary(date); "(#{date})"; end
</pre>


<p>Υ᥽åɤ뤳Ȥǡ̤ʸळȤǽǤХ⡼ɸˤѰդƤޤܤ00default.rb򻲾ȤƤ</p>


<p>ޤʬΥޥѥץ饰եѰդޤpluginǥ쥯ȥˡ㤨Сcustom.rbפȤ̾ǥեޤʬʷϵˤϡ֥ĥåߡפȤդäʤȤꤷơ񤭴뤳Ȥˤޤ礦ĥåߤȤդȤäƤ4ĤΥ᥽åɤcustom.rb˥ԡơ֥ȡפȤդ֤ޤ</p>


<pre>
def comment_today; 'Υ'; end
def comment_new; 'Ȥ'; end
def comment_description; 'ȤФɤ! E-mailɥ쥹ϸޤ'; end
def comment_description_short; ''; end
</pre>


<p>OKǤɽơѲƤ뤳Ȥǧޤ礦(ѡɤʤѲʤΤޤ)</p>


<p>¾ˤ⡢ޥѥץ饰Ȥơtheme_urlפѰդƤޤ</p>


<pre>
def theme_url; 'theme'; end
</pre>


<p>Υץ饰ϡơޥե뤬֤ƤURLꤹΤǤ̾ϥ󥹥ȡthemeǥ쥯ȥʤΤǤΤޤޤפǤƱ쥵ФʣѤƤʤɡơޥե줫˽᤿ˤϡȤʤȥơޤɤ߹ޤޤ</p>


<p>ޥȤϡ'theme'פ˥ơޥեΤǥ쥯ȥURLꤷޤURLκǸ/פǽäƤϤޤ</p>


<p>Τۤˤ⡢navi_usernavi_admin뤳ȤǡʥӥܥΥ٥ѹ뤳ȤǤޤޤ00default.rbˤϤʳˤ⡢HTMLΥإåξ䡢ա󥫡ʲΤ褦ʥץ饰Ƥޤ(ܤϥɤɤǤ)</p>


<ul>
<li><code>author_name</code>: ̾򼨤meta</li>
<li><code>author_mail</code>: ԤΥ᡼륢ɥ쥹򼨤meta</li>
<li><code>index_page</code>: INDEX򼨤meta</li>
<li><code>css_tag</code>: 륷ȤѤؼ륿</li>
<li><code>title_tag</code>: title</li>
<li><code>anchor</code>: 󥫡</li>
</ul>

<h2><a name="original">ꥸʥץ饰μ</a></h2>

<p>ʲǤϡRubyΥɤ񤱤ͤоݤˡꥸʥΥץ饰ˡ⤷ޤȸäƤ⡢ʸ֤᥽åɤ񤯤ʤΤ񤷤ȤϤޤ󡣤Ǥϡץ饰ѤǤ륤󥹥ѿβԤޤ</p>


<p>ץ饰ѤPlugin饹Ǽ¹ԤΤǡˤѿˤǤޤtDiary¾ʬ˱ƶФʤ褦ˤʤäƤޤäȤ⡢evalȤäƺƤޤȤǡǤ⼫ͳˤʤΤǤ</p>


<p>Plugin饹Υ󥹥ѿˤϰʲΤΤޤ</p>


<table border="1" style="margin-left: 3em;" summary="Plugin饹Υ󥹥ѿ">
<tr><th>ѿ̾</th><th></th></tr>
<tr><th>@mode</th><td>ưΥ⡼ɤɽʸǤtdiary.rbǻȤƤTDiary饹κ饹̾顢TDiaryäơdowncaseΤޤޤƤޤѤˤtDiary¤ΤäƤɬפǤ礦(񤭤ޤޤ)</td></tr>
<tr><th>@conf</th><td>TDiary::Config饹Υ󥹥󥹤ǡtdiary.confɤ߹ͤäƤޤ@conf.indexפΤ褦˥Ǥޤ</td></tr>
<tr><th>@diaries</th><td>ǡݻDiary󥹥󥹤HashǤɽоݤˤʤäƤդޤΤޤޤޤ(ǿɽǷޤǤϡ2ʬޤޤ뤳Ȥޤ)HashΥϡyyyymmdd׷դǡHashͤDiary󥹥󥹤Ǥ</td></tr>
<tr><th>@cgi</th><td>CGI饹Υ󥹥󥹤ǡ߼¹CGIϤƤѥ᥿CookieΥǡޤޤƤޤץȤΥѥ䡢ѥ᥿ͤѤǤޤ</td></tr>
<tr><th>@years</th><td>¸뤹٤ƤǯǡݻHashǤǯͤϷArrayǤ</td></tr>
<tr><th>@cache_path</th><td>åեΤǥ쥯ȥꡣץ饰ǥåȤϡȼΥǥ쥯ȥ򷡤äѤޤ</td></tr>
<tr><th>@date</th><td>ɽաɽΤɤϡ@mode򸫤ʤȽǤǤޤ</td></tr>
<tr><th>@plugin_files</th><td>ץ饰ե̾(եѥ)ɤ߹ޤ줿äArray󥹥󥹤ǤߤβƯΥƥǡɤΤ褦ʥץ饰ѲǽΤɸȤƻȤޤ</td></tr>
<tr><th>@last_modified</th><td>ɽ褦ȤƤڡκǽ郎äTime֥ȤǤ(HTTPإå֤ΤƱ)ڡξʤɡ̣ͤʤˤnilˤʤޤ</td></tr>
<tr><th>@debug</th><td>ץ饰ȯΥǥХåѥե饰Ǥͤ᥽åtrueˤȡץ饰¹Ի¸ߤʤ᥽åɤƤǤ⥨顼ˤʤޤ(̾ˤ̵뤵Ƥޤ)ѿѤΤϥץ饰ȯΤߤˤȤɤᡢץ饰ۻˤɬƤ</td></tr>
</table>

<h2><a name="callback">Хåϥץ饰</a></h2>

<p>ñʸ֤᥽åɤƤʸǻȤΥץ饰Ȱ㤤ξǤΤ߸ƤӽФ褦ʥХåϥץ饰󤬤ޤtDiaryεǽĥ뤿ѤǤޤʲˤκ⤷ޤ</p>


<p>ХåϤΥץ饰ϸߡʲ4Ƥޤ</p>

<ul>
	<li><code>update_proc</code>: ӥĥåɲû˸ƤӽФ</li>
	<li><code>header_proc</code>: HTMLإå˸ƤӽФ</li>
	<li><code>body_enter_proc</code>: ʸϤľǸƤӽФ롣ѥ᥿˽(Time󥹥)Ϳ</li>
	<li><code>body_leave_proc</code>: ʸλľ˸ƤӽФ롣ѥ᥿˽(Time󥹥)Ϳ</li>
	<li><code>footer_proc</code>: footer˸ƤӽФ</li>
	<li><code>edit_proc</code>: եǸƤӽФ롣ե˿ʥƥɲä˻Ȥѥ᥿˽(Time󥹥)Ϳ롣ɲäƥname°ϡɬplugin_ץ饰̾_ƥ̾פˤʤäƤʤƤϤʤʤ</li>
	<li><code>form_proc</code>: եμ˸ƤӽФ롣եȤ̤ΥեʤɤɲäȤ˻Ȥѥ᥿˽(Time󥹥)Ϳ롣եɲä硢submitܥˤɬpluginפȤname°դɬפ</li>
	<li><code>conf_proc</code>: ̤ǸƤӽФ롣ץ饰ΥץWebԤΥץ饰</li>
</ul>

<p>̾Υץ饰Ʊͤ˥᥽åɤȤƼƤޤƤϤޤ󡣾񤭤ȡεǽȤäƤ¾Υץ饰󤬸ƤӽФʤʤäƤޤǤ</p>


<p>ΤᡢΥץ饰ˤϵǽɲä뤿Υ᥽åɡ<code>add_update_proc</code><code>add_header_proc</code><code>add_body_enter_proc</code><code>add_body_leave_proc</code><code>add_footer_proc</code><code>add_edit_proc</code><code>add_form_proc</code>ѰդƤޤϥ֥åȤޤϿ줿֥å֤˸ƤӽФ뤳ȤǡʣΥץ饰󤬼¹Ԥޤޤ<code>conf_proc</code>б<code>add_conf_proc</code>ϸҤ褦˥ɤȥ٥ʸ˼ꡢɬפʻƤӽФޤ</p>

<p>Υץ饰ϡŪ˰ʲΤ褦ƻȤޤ</p>

<pre>
# ɤhead
add_header_proc do
   '&lt;meta name="keyword" content="Linux,Kondara"&gt;'
end
</pre>

<p>body_enter_procbody_leave_procedit_procform_procϡоݤˤƤդ֥åѥ᥿ȤƼ褦ˤʤäƤΤǡʲΤ褦˻ꤹɬפޤ</p>

<pre>
# ǽɽ
add_body_enter_proc do |date|
   diary = @diaries[date.strftime( '%Y%m%d' )]
   '#{diary.last_modified( "%Y-%m%-d" )}'
end
</pre>

<p>ʤХåϥץ饰Ϥ줾Υ֥å֤ʸ򤹤٤Ϣ뤷HTMLߤޤ<code>update_proc</code>ϲߤޤ(̣ʤΤ)Τᡢ<code>update</code>Ѥɲä֥åϲ֤ɬפϤޤ</p>

<p>ǥեȥץ饰եǤ00default.rbˤϡɸHTMLإåheader_procѥ֥åƤޤ</p>

<p>ޤñȤǤϰ̣ΤʤХåϥץ饰󤬤ޤedit_procǤedit_procϹեʸिΥץ饰ǤˤäƹեǤդΥƥɲäǤޤΥƥϤ줿ͤϡupdate_procǼȤɬפǤ礦</p>

<pre>
# name°ˤϡplugin_ץ饰̾_ƥ̾פդʤФʤʤ
add_edit_proc do |date|
   'Hoge: &lt;input name="plugin_hoge_item1"&gt;'
end

# ͤ
add_update_proc do
   if /^(append|replace)$/ =~ @mode then
      hoge = @cgi.params['plugin_hoge_item1'][0]
   end
end
</pre>

<p>ƱեɲäŪȤform_procǤϤΤ褦ˤɬפϤʤƱform_procϤȤ뤳ȤǤޤ</p>

<p>¾ΥХåϥץ饰ȤϾभۤʤΤ<code>add_conf_proc</code>ǤʲΤ褦˸ƤӽФޤ</p>

<pre>
add_conf_proc( 'hoge', 'hoge' ) do
   # ¸
   if @mode == 'saveconf' then
      @conf['hoge.fuga'] = @cgi.params['hoge.fuga'][0]
   end

   # ̤ν
   &lt;&lt;-HTML
   &lt;h3&gt;fugaλ&lt;/h3&gt;
   &lt;p&gt;&lt;input name="hoge.fuga"&gt;&lt;/p&gt;
   HTML
end
</pre>

<p>1ܤΰϡʣ<code>conf_proc</code>椫ɤɽ뤫֤ˡץ饰ǰդˤʤ褦ˤĤ륭ɤǤŪˤϥץ饰̾ΤĤޤ2ܤΰ̤ΰɽȤ˻Ȥ٥ʸǤˤäѹޤ</p>

<p><code>@mode</code><code>'saveconf'</code>λΤߡ@cgiͳϤ줿¸ޤ¸@conf[]˥ץѤΥɤꤷޤϽtdiary.confˤơ@optionsȤƻꤷΤƱǤʤconf_proc¸Ǥ륪ץϡʸ(String)(Fixnum)(TrueClass/FalseClass)nil(NilClass)ɽ륪֥ȤǤ</p>

<p>conf_procȤä¸ȡθtdiary.confˤ@optionsϸʤʤΤդɬפǤޤ@conf.secure˱ǤܤѲ褦ˤƤС󥿥ξɬפʹܤ桼ѹǤʤ뤳ȤǽǤ</p>


<h2><a name="output">ץ饰HTML</a></h2>
<p>ץ饰ϰŪʸ֤ȤǤʸޤ櫓Ǥ¿ξ礽ʸHTMLҤˤʤޤHTMLҤϰʲΥ롼˽褦ˤƤ

<ul>
	<li>HTML 4.01 Strict˽򤹤롣tDiaryHTML 4.01 Strict˽򤷤HTMLޤΤᡢץ饰⤽臘ɬפޤ</li>
	<li>ȼΥ饹̾(HTMLclass°)ˤϡơ޾Ǥλ뤿ˡ֥ץ饰̾-饹̾פΤ褦ʷˤ뤳Ȥ򶯤侩ޤ</li>
</ul>

<p>Ťץ饰Ǥ2ܤξ˽äƤʤ礬ʤޤ󤬡˺ˤϽ餹褦ˤƤ</p>

<h2><a name="methods">Plugin饹Υ᥽å</a></h2>

<p>ץ饰ϡTDiary::Plugin饹Υ󥹥줿ðۥ᥽åɤȤưޤ(ХåϽ)ΤᡢǤPlugin󥹥Ƥ᥽åɤϡץ饰󤫤鼫ͳ˸ƤӽФȤǽǤ㤨Фץ饰εǽ̤Υץ饰󤫤̾Υ᥽åɸƤӽФηѤǤ櫓Ǥ</p>
<p>¾ˡPlugin饹ˤϰʲΤ褦ʥ᥽åɤѰդƤޤ̾Plugin饹رƶڤܤʤץ饰ǤΥ᥽åɤȤȤǤ줬ǽˤʤäƤޤ</p>

<table border="1" style="margin-left: 3em;" summary="Plugin饹ɸ᥽åɰ">
<tr><th>᥽å̾</th><th></th></tr>
<tr><th style="white-space: nowrap;">add_cookie( cookie )</th><td>Web֥饦֤Cookieɲäޤץ饰󤫤鲿餫ξWeb֥饦¦ݻƤߤ˻ȤޤcookieCGI::Cookie󥹥󥹤ǤʤդCookieȤϡ@cgi󥹥ѿƤ</td></tr>
<tr><th style="white-space: nowrap;">apply_plugin( str, remove_tag )</th><td>ץ饰ʸˡ˥ץ饰ƽФλ꤬硢⤦٥ץ饰θƽФԤޤtrueˤ(άǽǥǥեȤfalse)HTMLޤ</td></tr>
<tr><th style="white-space: nowrap;">shorten( str, limit )</th><td>ʸstrlimitǻꤵ줿Хȿڤͤޤڤͤ줿ˤˡ...פղäޤץ饰ʸɽʸ¤˻Ȥޤ</td></tr>
<tr><th style="white-space: nowrap;">add_XXX_proc( proc )</th><td>Хåϥץ饰ɲä᥽åɡXXXפˤheaderupdatebody_enterbody_leavefooter롣procˤProc󥹥󥹡⤷ϥ֥åͿ롣<a href="#callback">Хåϥץ饰</a>򻲾ȡ</td></tr>
</table>

<h2><a name="option">ץ饰ؤΥץϤ</a></h2>

<p>ץ饰RubyΥ᥽åɤǤ顢ƤӽФ˰ꤹ뤳ȤǡѼԤץ饰εưѹ뤳ȤǽǤtdiary.confԤŪ˥ץꤷ礬ޤΤ褦ʥץ饰ˤϡtdiary.confǻǤ@optionsѿȤȤǤޤ</p>

<p>@optionѿϡץ饰󤫤@conf[]ͳƸ뤳ȤǤǡtdiary.confǤդʸ򥭡ȤСץ饰Ѥ뤳ȤǽǤ@optionsΥ˻ꤹʸϤʤǤ⤫ޤޤ󤬡̾νʣ򤱤뤿˥ץ饰̾ȥץ̾.פǶڤäΤ侩ޤ</p>
<pre>
# sampleץ饰hogeץꤹ(tdiary.conf)
@options['sample.hoge'] = 'foobar'
</pre>

<pre>
# sampleץ饰ǥץ(sample.rb)
hoge = @conf['sample.hoge']
</pre>

<p>ޤconf_procץ饰ȤȤǡѿͤWeb夫ŪǤ褦ˤǤޤܤϥХåϥץ饰򻲾ȤƤ</p>

<p>ʤλȤߤϥץ饰¦ˤǤե֤ǻȤ褦ˤʤץ饰δؤ襤Ǥޤǽ⤢ޤǤ@optionsꤵƤʤƤư褦ˡŬڤʥǥեȤѰդ褦ˤƲ</p>

</body>
</html>