オープンソースのナレッジベース「KBPublisher 2.0.1」のホーム画面や検索結果画面の記事(ナレッジのコンテンツ)のタイトル下に表示される概要(記事の抜粋)が日本語化した際に表示されなくなる場合の対処方法について覚書。
ただし、この対処を行っても表示されない記事があるため暫定的な対処方法。
記事の抜粋が表示されない原因
日本語の記事は「KBPublisher」では記事タイトルの下に表示されるはずの記事の抜粋が表示されない。
原因としては、以下の記事で説明もしたが、抜粋表示のための処理の中で使われているSUBSTRING_INDEX関数の使い方が日本語向きではないためである。
従って、このSUBSTRING_INDEX関数の引数を変更して日本語向きに変える。
対処手順
以下に対処手順を記載。
"kb\client\inc"フォルダのKBClientModel.phpファイルをメモ帳などのテキストエディタで開く。
409行目の以下の行を修正する。
修正前:
? "SUBSTRING_INDEX(e.body,' ',$body_words)"
修正後:
? "SUBSTRING_INDEX(e.body,'¥¥n',1)"
次に"kb\client\inc"フォルダのKBClientSearchModel.phpファイルを開く。
24行目の以下の行を修正する。
修正前:
SUBSTRING_INDEX(e.body,' ',70) AS body,
修正後
SUBSTRING_INDEX(e.body,'¥¥n',1) AS body,
次に「KBPublisher」の管理ページにログインする。
URL:http://サーバー名/kb/admin
デフォルトユーザー名:admin
デフォルトパスワード:demo
管理画面上部のメニューの[設定]をクリックする。
設定ページが開くので[Knowledgebase]タブの[プレビュー設定:]の[記事の文字数制限:]の値を300に変更する。
以上で手順は終了。
修正内容について
修正内容の意味は、デフォルトでは「記事中の70回目の半角スペースから前までの文章を記事の抜粋として使う」という設定から「記事中に初めて出てきた改行コードの前までの文章を記事の抜粋として使う」に変更したことになる。
日本語は英語と異なり単語間をスペースで区切るようなルールがある言語ではないため、半角スペースというのはあまり意味がない。
日本語の文章の区切りを表すのは「。」と考えられるが、PHPの関数の引数に全角文字を使いたくなかったのと、「。」で区切ると「。」の前で切られてしまうのを防ぐために改行コードを区切りとして使用した。
記事の構成によっては、改行コードが必ずしも文章の区切りとして正しいとは言えないが、他に明確に文章の区切りを表せるものがなかったため改行コードを用いた。
概要文の文字数については、300という指定をしたが、この設定は色々調節してみて決めてほしい。
ホーム画面ではきちんと概要が表示されても、検索結果画面では表示されない場合があって、原因もまだ判明していないので暫定方法とした。
コメント