rNote では最初から RSS のフォードの生成機能が備わっている。そのバージョンは RSS1.0 だ。

これまでは特に問題を感じていなかったのだが、 KDE のフィードリーダ Akregator に当サイトのフィードを追加してみたところ、記事一覧の作者の表示がされなかった。

各記事に dc:creator を追加してみるなどいろいろやってみたのだがだめだったので、多分 RSS2.0 形式なら作者も表示されるだろうと推測し、 rNote に RSS2.0 のフィード生成機能を追加した。

プラグインとして実装できるかな、と思ったのだが、 RSS の生成時に RSS 用のスキンが使用され、 RSS 用スキンのための置換文字列の処理が rNote 本体に実装されているので、この部分をプラグイン化して外部に出さない限り無理だと分かった。なので、とりあえず rNote 本体に処理を追加する形で実現した。

追加したファイル:

rss2_body.skin, rss2_item.skin

修正したファイル:

rnote_config.php( FNAME_RSS2, MAX_DESCRIPTION_RSS2, FNAME_SKIN_RSS2 の3つの定数を追加した。)

rnote.php( CreateRSS2() を追加し、AdminMode() 内で CreateRSS() に続き CreateRSS2() を呼ぶようにした。 CreateHTML() 内に、スキン用のタグとして rss2_url を置換する処理を追加した。)

html_side.skin( RSS2 のフィードへのリンクを追加した。)

RSS2.0 の記述の仕方やフィードのファイル名の付け方については、「RSSのフォーマット・仕様・構造 - RSS1.0、RSS2.0、Content-Type」や「横着者のRSS 2.0 配信ページの作成方法」が参考になった。

試したところ、 Akregaror で問題なく作者が表示されるようになった。

この記事のリンク元 | 9 | 8 | 1 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190818_160607538729.htm

キーワード: RSS2.0 rNote


以前、「ブログにタグクラウドを追加してみた」に書いたとおり、 rNote にタグクラウドの処理を追加したが、そのときは、 rnote.php 本体に実装して実現した。

最近、コールバックプラグインの処理を実装したので、これを使ってタグクラウドの処理もプラグイン化することにした。

rnote.php の CreateHTML() が呼ばれるタイミングで起動されるコールバックプラグインを追加し、これを "createhtml" タイプとして追加した。

このコールバックプラグインが呼ばれると、グローバル変数 $g_keyslist を、タグと参照回数の連想配列として初期化する。

一方で、スキンから呼び出される(コールバックではない)プラグインが、 $g_keyslist の内容をもとにタグクラウドを生成し出力するようにした。

今回ちょっと面白いのは、上記2つのプラグイン(コールバックプラグインとコールバックではないプラグイン)を、1つのクラスとして実装し、1つの .php ファイルの中に記述したことだ。

つまり、1つのクラスで2つの種類のプラグインを表現している。こういうこともできるのだと我ながら感心した。

この記事のリンク元 | 9 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190815_210316931286.htm


ずいぶん前に一度、この機能を実装した記憶があるのだが、今の rNote を見る限り機能が付いていなかったので、改めて実装した。

今回は、プラグイン機能の拡張から行った。

rNote のプラグイン機能は、基本的に、 PHP で1つのクラスを作ることで行われる。そのクラスには、 exec() というメソッドを実装しておき、クラス名と同名の主ファイル名の php ファイルを plugins/ ディレクトリの中に入れておく。

そして、スキンファイルの中で、 <%=plugin func="呼び出し関数名" opt="呼び出し関数に渡すパラメータ"> タグを書き込んでおくと、その部分が表示されるときに、プラグインが呼ばれる、という作りだ。( func パラメータは無くてもいいが、その場合 exec() メソッドが呼ばれる。)

ただ、このプラグイン形式だと、スキンファイルに記述しておき、そのスキンファイルが表示されるタイミングでしか呼び出すことができない。

今回の場合、「コメントが送信された」というタイミングで、そのコメントに関する情報を管理者にメールする必要があるので、特定の動作をトリガーにして、パラメータを受け取って起動するようなプラグインである必要がある。なので、現状の「スキンに書かれ、スキンが呼ばれるタイミングで実行される」形式では要件を満たせない。

そこで、今回は、 rNote.php 本体に手を入れ、「『コメントが送信された』タイミングで呼び出されるプラグイン」というものを実装した。このように、「ある動作をトリガーとして、その動作が起きた時に呼び出されるプラグイン」のことを、「コールバックプラグイン」と呼ぶことにした。

そして、コールバックプラグインの実装方法は、 rnote_config.php の中に、

$g_strPlugin = array();

array_push($g_strPlugin, array('name' => 'cmntemail', 'instance' => null, 'func' => 'callback', 'type' => 'wbsave'));

のように、呼ばれるプラグインに関する情報をひとまとめにした要素をもつ配列 $g_strPlugin を用意し、その1要素として、 name, instance, func, type を定義し配列 g_strPlugin に追加する。ここで、 name はプラグインのクラス名、 instance は初期値 null 、 func は呼び出されるメソッド名、 type はコールバックプラグインの種類と定義した。現在は、 type は 'wbsave' (コメントが送信され保存されたタイミング)のみが実装されている。

この形式で、 email を送信する cmntemail クラスを記述し、 plugins/ ディレクトリに用意することで実現した。

何度かテストし、問題なく動作することを確認している。

この記事のリンク元 | 9 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190813_165038581371.htm


rNote は、記事にコメントが付いた場合、有無を言わさず即時公開される。

これでいい場合は構わないのだが、公開して良いコメントかどうかを確認してからOKなら公開するようにした方がよいと思う管理者もいると思う。自分もその一人だ。コメントスパム対策にもなると思う。(コメントスパムがつくこと自体を回避はできないが、スパムだらけの記事にならないように管理することはできる。)

そこで、管理者画面に追加するタイプのプラグインとして一つ、「コメント承認」プラグインを追加した。

このプラグインの実装のために、まず rNote 本体に手を入れ、コメントの内容を保存したログファイルのフォーマットを拡張した。このログファイルは、コメントのつく先の記事1つにつき1ファイル作成され、1つのコメントが1行になるようになっている。1行の形式は、

投稿者名 [tab] mail/url [tab] 本文 [tab] 投稿日時 [\n]

となっていたので、1項目追加し、下のような形式にした。

投稿者名 [tab] mail/url [tab] 本文 [tab] 投稿日時 [tab] コメント承認フラグ[\n]

コメント承認フラグは「0:未承認, 1:承認済み」というフラグとした。

rNote に手を入れた場所はもう1箇所あって、管理者画面用の「動作設定」プラグイン ( config.php )

だ。ここに、「コメントを承認制にするかどうか」のラジオボタンを追加し、状態を保存するため、他の項目と同様に、グローバル変数の配列 $g_config[] に 'confirm_comment' というキーで値を保存するようにした。このフラグの設定状態を見て、 rNote.php 本体でコメントが送信されたときの処理に、コメント承認制であれば先程のコメント承認フラグを 0 にセットし、承認制でなければコメント承認フラグに 1 をセットしてログファイルを書き込むように動作を修正した。

ここまでの準備ができたので、いよいよコメント承認プラグインを書いた。ぷにゅさんが公開されている「Entries List Plug-in v1.01 & rNote LogViewer lot.041025」を参考に実装した。

ぷにゅさんのプラグインでは、コメントのログファイルを一覧表示し、中身を編集したり、ログファイルを削除したりできるようになっているが、自分のプラグインでは、ログファイルの一覧ではなく、コメントの一覧を表示し、コメントごとに「承認・未承認」の状態を切り替えられるリンクをつける形にした。1ページ分の表示件数は、ぷにゅさんと同じ30件にしたが、この30件はログファイルの件数なので、コメントの多く付いた記事があった場合、実際に1ページに表示される項目数は30を超える。

とりあえずこれで安心してコメント管理ができる。

この記事のリンク元 | 9 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190813_165002332041.htm


最近 wordpress などを使った他の人のブログに共通のアイコンが使われているのに気づいた。

調べてみると、 font awesome というサイトのフリーアイコンを使っているのが分かった。

分かりやすいアイコンな気がしたので、自分のブログにも設置してみた。

まずは、ブログ左側の「コーナー」のツリー表示にフォルダアイコンを設置したかったのだが、いきなり壁にぶちあたった。 rNote はこの部分のツリー表示は ul, li などで実現しており、フォルダアイコンを表示させたい部分は ul に対するスタイルシートで list-style-type:square; を指定して「・」として表示させているのだが、 font awesome がアイコンを表示させる通常の方法はスタイルシートではなく <i> などの無効タグに class="hoge" の形でクラス要素を指定することで実現しているので、この場合、通常の方法では font awesome のアイコンが表示できないのだ。

いろいろ検索して、「FontAwesomeのiconをulやolのlist-styleに使う方法」という記事を見つけた。スタイルシートで、

li:before {

font-family: FontAwesome;

content: '\f073'; /* icon unicode */

}

のようにして li:before を定義し、アイコンフォントの文字コードを指定するという形で実現できることが分かったので、フォルダを設置することができた。

ただ、この方法だと、コード番号しか指定できないのだが、 font awesome のアイコン一覧を見ると、同じコード番号でありつつ、違うデザインのアイコンも存在している。例えば、カレンダーのアイコンである calender-alt は2種類あって、どちらもコード番号は \f073 なのだが、片方は fas(solid style) で、もう片方は far(regular style) である。 i タグを使う場合は、このスタイルを普通に記述すればよいのだが、今回のようにスタイルシートで実装しないといけない場合、 fas, far の違いを指定する方法がないので、表示させたいアイコンを指定する方法がない。これは困ったが、とりあえずフォルダアイコンについては同じコード番号のアイコンが複数あるというわけではなかったため設置できた。

その他にも、日時の表示部分に時計のアイコンなどを設置してみた。これららは i タグで実現できたので問題はなかった。

この記事のリンク元 | 9 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190809_140605375060.htm

キーワード: font awesome icon blog parts