ページタイトルのフォーマット

開発中の XCL2.2 に、統一的なページタイトルをサイト運営者が設定できるような仕組みを追加しました(ページタイトルっていうのは、ブラウザの上部やタブに表示されるサイト(ページ)の名前のことです)。

XOOPS Cube Legacy では、モジュール側で何もしなければモジュール名がページタイトルにセットされます。
しかしその場合、ブログのように沢山記事があってもページタイトルはすべてモジュール名になってしまいます。ブログの各記事のタイトルを表示したいかもしれませんし、Google の Webmaster Central ではページ名が重複していると怒られます。
そこでページごとに異なるタイトルを付けたい場合は、XCLではそれぞれのモジュールで
$render->setAttribute('xoops_pagetitle', 'ページタイトル');
のように、XCube_RenderTarget オブジェクトから setAttribute でセットします。

しかし、モジュールごとのページタイトルの設定について特に決まりはありませんので、適当につけていてバラバラなのが現状です。
そこで、サイト管理者がある程度統一的にページタイトルを指定できるように、XCL2.2 では legacyRender の一般設定と、ページタイトルフォーマット用のメソッドを用意しました。

Legacy_Utils::formatPagetitle(/*** string ***/ $modulename, /*** string ***/ $pagetitle, /*** string ***/ $action)
のように、モジュール名、タイトル(「こんにちは」「XCLのインストールに付いて」など)、アクション(一覧、削除、編集など)
を指定すると、ページタイトルのフォーマットに加工した文字列を返してくれます。Legacy_Utils は、Legacy_Controller の中で読み込まれますので、だいたいどこでも使えます。

フォーマットは、legacyRender の一般設定から、以下のような感じでサイト管理者が指定できます。
{modulename} {action} : {pagetitle}
この設定で、
Legacy_Utils::formatPagetitle('きゅぶくまくん', 'ページタイトルの設定方法', '編集')
とすると、
きゅぶくまくん 編集 : ページタイトルの設定方法
という文字列が返ってきます。

legacyRender の一般設定で、
{modulename} 「{pagetitle}」({action})
と設定しておけば、
きゅぶくまくん 「ページタイトルの設定方法」(編集)
という文字列が返ってきます。

このように、サイト運営者がページタイトルを統一的にコントロールすることができます(各モジュールがこのフォーマットを使ってページタイトルを設定していれば)。

ところで、上の例で $pagetitle(ページタイトルの設定方法)が設定されていないと、
きゅぶくまくん 「」(編集)
と表示されることになります。これを避けるには、
{modulename} [pagetitle]「[/pagetitle]{pagetitle}[pagetitle]」[/pagetitle]({action})
のように[pagetitle][/pagetitle]で囲ってやると、$pagetitle が設定されている時だけ表示されます。modulename, action についても同様です。

一応まとめますと、各モジュール作者は、
$render->setAttribute('xoops_pagetitle', Legacy_Utils::formatPagetitle('きゅぶくまくん', 'ページタイトルの設定方法', '編集'));
でページタイトルのセット完了となります。