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


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

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

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/06/05 11:31:48
  • 終了:2014/06/12 11:35:04

回答(2件)

id:pmint No.1

pmint回答回数40ベストアンサー獲得回数62014/06/05 22:09:51

ポイント50pt

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を使わないといけません。

id:pmint No.2

pmint回答回数40ベストアンサー獲得回数62014/06/05 23:58:20

ポイント50pt

前の回答を応用して、設定ファイルを利用してみました。
省略しないページ名を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);

この例では…

  • PukiWiki/
  • CCCC/
  • 全体表示

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません