人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Pukiwikiで、ページタイトルの出力形式の変更を、分岐させて行いたいと考えています。

具体的にやりたいことは、こんな感じです↓
・原則、ページ名の末尾だけを取り出して、タイトル部分に表示
・ページ名が特定の文字列(以下の例ではcccc/)から始まる場合は、
ページ名全体をタイトル部分に表示

(例)
aaaa/bbbb というページ名の場合 → bbbbのみをタイトルに表示
cccc/dddd というページ名の場合 → cccc/ddddをタイトルに表示

何か良い方法はありますでしょうか。宜しくお願い致します。

●質問者: rand198
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pmint
●50ポイント

question:1401624986と似ていたので回答を流用しますが、ページタイトルを作っている所で分岐させるのがいいと思います。
例はPukiWiki 1.4.7 UTF-8版ですが、他のバージョンでも同様だと思いいます。

ページタイトルは lib/pukiwiki.php、大見出し<h1>は lib/html.php で作られていますが、どちらか一方だけでも有効です。

# lib/pukiwiki.php 104行目
# ブラウザーのタイトルバーに表示される <title>FrontPage - PukiWiki</title> を作っている部分

104:$title = htmlspecialchars(strip_bracket($base));
 ↓
104:if (preg_match('/^(?:PukiWiki\/|CCCC\/)/', strip_bracket($base))) {
105:$title = htmlspecialchars(strip_bracket($base));
106:} else {
107:$title = htmlspecialchars(end(preg_split('/\//', strip_bracket($base))));
108:}

# lib/html.php 370行目
# ページ内の大見出し <h1 class="title"> ... </h1> (Backlinks for: ... へのリンク)を作っている部分

370:$s_page = htmlspecialchars($page);
 ↓
370:if (preg_match('/^(?:PukiWiki\/|CCCC\/)/', $page)) {
371:$s_page = htmlspecialchars($page);
372:} else {
373:$s_page = htmlspecialchars(end(preg_split('/\//', $page)));
374:}

全体を表示するページをさらに追加する場合は '/^(?:PukiWiki\/|CCCC\/)/' → '/^(?:PukiWiki\/|CCCC\/|MORE\/)/' のようになります。
日本語を入れるときは '/^(?:PukiWiki\/|CCCC\/|' . preg_quote('ページ名/', '/') . ')/' といったようにpreg_quoteを使わないといけません。


2 ● pmint
●50ポイント

前の回答を応用して、設定ファイルを利用してみました。
省略しないページ名をpukiwiki.ini.phpなどに書く例です。

// 例えば pukiwiki.ini.php の114行目
// 適切に実行されるなら別のファイルでも構いません。

114: $page_title = 'PukiWiki';

 ↓

114: $page_title = 'PukiWiki';
115: 
116:+ $show_fullpath_pages = array(
117:+ 'PukiWiki/',
118:+ 'CCCC/',
119:+ '全体表示',
120:+ );
121:+ foreach ($show_fullpath_pages as $fullpath_page) {
122:+ $show_fullpath_pages_quoted[] = preg_quote($fullpath_page, '/');
123:+ }

// lib/pukiwiki.php 104行目
// ブラウザーのタイトルバーに表示される <title>FrontPage - PukiWiki</title> を作っている部分

104:- $title = htmlspecialchars(strip_bracket($base));
105: $page = make_search($base);

 ↓

104:+ if (preg_match('/^(?:' . implode('|', $show_fullpath_pages_quoted) . ')/', strip_bracket($base))) {
105:+ $title = htmlspecialchars(strip_bracket($base));
106:+ } else {
107:+ $title = htmlspecialchars(end(preg_split('/\//', strip_bracket($base))));
108:+ }
109: $page = make_search($base);

// lib/html.php "function make_search"以降
// ページ内の大見出し <h1 class="title"> ... </h1> (Backlinks for: ... へのリンク)を作っている部分

366: function make_search($page)
367: {
368: global $script;
369: 
370:- $s_page = htmlspecialchars($page);
371: $r_page = rawurlencode($page);

 ↓

366: function make_search($page)
367: {
368: global $script;
369:+ global $show_fullpath_pages_quoted;
370: 
371:+ if (preg_match('/^(?:' . implode('|', $show_fullpath_pages_quoted) . ')/', $page)) {
372:+ $s_page = htmlspecialchars($page);
373:+ } else {
374:+ $s_page = htmlspecialchars(end(preg_split('/\//', $page)));
375:+ }
376: $r_page = rawurlencode($page);

この例では…

…で始まるページを省略せずに表示します。(それ以外のページは/で区切った最後の1片だけを表示)

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ