以前、「ブログにタグクラウドを追加してみた」に書いたとおり、 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 の検索プラグイン search.php の動作を修正した。

search.php は、各記事の .xml ファイルを全て読み込み検索処理を行うが、その際、 .xml ファイル内のタグの内容だけでなく、タグ自身も検索対象に含むかどうかを選択するフラグがある。

このフラグがデフォルトで true にセットされていた。なので、検索文字列として rNote と入力した場合、全ての記事がヒットしていた。

これでは意味がないので、 記事の .xml ファイルのタグ自身は検索対象から外すよう、フラグを false にした。

ところが、このときの動作として、

  $entry_buf = _file_get_contents(DIR_DATA . $fname);

if(!$this->bSearchTags){

$entry_buf = strip_tags($entry_buf);

というように、 strip_tags() の結果を使用して検索している。これだと、記事内の全てのタグの内容が無条件に検索対象になってしまうので、意図しない結果をもたらす。これではまずい。

そこで、検索対象とするタグを Title, Text, Addition, Keys に限定することにした。それぞれ、記事の題名、本文、追記、キーワードである。

これで、例えば rNote を検索文字列に指定した場合でも、正しく rNote が題名、本文、追記、キーワードに含まれる場合のみヒットするようになった。

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

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