
オープンソースのナレッジベース「KBPublisher Ver 2.0.1」を日本語環境で使用するときに発生する今現在わかっている問題点について覚書。
いくつかの問題点については、過去の記事で解決したけれども、まだ解決できていない問題がいくつか残っている。
とりあえず覚書しておいて解決したら順次詳細を記述する予定。
概要表示について
KBPublisherのホーム画面や検索結果画面では、記事(ナレッジのコンテンツ)のタイトルの下に詳細の一部を抜粋して表示している。
この概要が出てくる場合と出てこない場合がある。
この概要表示に関係しているコードは、"kb\client\inc"フォルダにある"KBClientModel.php"ファイルの409行名の以下の記述部分だと思われる。
? "SUBSTRING_INDEX(e.body,' ',$body_words)"
また、検索結果画面の場合は、"kb\client\inc"フォルダの"KBClientSearchModel.php"ファイルの24行目の以下の記述部分だと思われる。
SUBSTRING_INDEX(e.body,' ',70) AS body,
何れにせよ「SUBSTRING_INDEX」が原因のよう。
この関数をマニュアルで調べたところ、
SUBSTRING_INDEX(str,delim,count)
文字列 str から、delim に指定された区切り記号の count 個目の出現位置の直前までの部分文字列を返す。
count に指定された数が正数の場合は、(左から数えて)指定された数の最後の区切り記号の左側にあるすべての文字を返す。
count に指定された数が負数の場合は、(右から数えて)指定された数の最後の区切り記号の右側にあるすべての文字を返す。
例えば、以下のようなSQLを実行すると"www.mysql"が出力される。
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
日本語では、単語の区切りを英語のように" "(半角スペース)で区切らないため、区切りに" "を指定しても意味がない。
ということで、以下のように改行コードを区切りに指定してコードを変更して試した。
SUBSTRING_INDEX(e.body,'¥¥n',1) AS body、? "SUBSTRING_INDEX(e.body,'¥¥n',1)"
また、管理ページにログインして、[設定]の[プレビュー設定]で、[記事の文字数制限]を300に設定することにより、ホーム画面の記事一覧の"概要"はきちんと表示されるようになったが、検索結果画面は変更前と変わず"概要"が表示されず、"..."だけの表示。
なんかこれじゃだめらしい。
でもこれ以上わからないのでとりあえず保留。
用語集について
KBPublisherには、「用語集」という便利な機能があって、「用語集」に単語とその単語の説明文を登録すると、登録した単語が記事中に出てきた場合、自動でハイパーリンクが張られる。
そのハイパーリンクをクリックするとその「用語集」に登録した単語の説明文がポップアップした吹き出しのような画面に表示される。
オプションとして記事中に登録した単語が複数出て来る場合に、一番最初に出てきた単語だけに処理する設定と、記事中に出てくる全ての同単語に処理する設定のどちらかを指定できる。
非常に便利な機能なのに「用語集」に日本語の単語を登録してもきちんと動作してくれる場合とまったく動作しない場合と登録した単語によって結果が異なる。
原因になっているのは、"kb\client\inc"フォルダの"DocumentParser.php"ファイルの158行目の以下の記述だと思われる。
$preg = "~¥b($k)¥b(?![^<]*>)~i";
この正規表現部分を直せば日本語でも機能するようになる気がするが、色々試したものの、結局だめだった。 という訳でこれも保留。
用語集機能の問題が解決!
日本語だとうまく機能しなかった用語集ですが、日本語でもきちんと動作する解決策が判明しました! 詳細については、以下の記事にまとめたので参照してください。

これら以外にももっと使い込むと新たな問題が見つかるかもしれない。 誰か解決策を教えてください...


コメント
用語集はこれで対応できたっぽいです。
https://gist.github.com/frah/8017685
> 用語集はこれで対応できたっぽいです。
> https://gist.github.com/frah/8017685
ありがとうございました!
確かに用語集使えるようになりました!