2015/01/24(土)PukiWiki bodycache patch副作用:id重複

PukiWiki bodycache patch副作用:id重複

たまたま気が付いたのですが、ECO-Wikiのメニューバーと本文それぞれの見出しのidが重複していました。

例えば、ECO-Wiki (acronia) トップページでは、メニューバーの「ECO攻略Wiki」と本文の「ECO-Wiki (acronia):エミル・クロニクル・オンライン攻略情報wiki」に同じid="content_1_0"が振られています。

原因を追ってみたところ、どうやらbodycacheパッチの副作用のようです。

  • 発生条件
    • PukiWiki bodycacheパッチを適用している。
    • MenuBarと本文の両方で見出しを使用している。
  • 原因
    • bodyキャッシュを読み込んだときは、本文に対するconvert_htmlの実行はスキップされる。その結果、convert_html内の$contents_idがインクリメントされなくなるため、メニューバー生成時のconvert_htmlの実行結果に影響を与えてしまう。
      function convert_html($lines)
      {
      	//省略
      	static $contents_id = 0;
      	//省略
      	$body = & new Body(++$contents_id); //この$contents_idのインクリメントが必要
      	//省略
      }
      
  • 対策
    • 場当たり的な対応ですが、$bodycache_statusが'cached'になっていたら、bodycacheによりconvert_htmlの実行がスキップされたと見なして、$contents_idをインクリメントするコードを追加しました。
      function convert_html($lines)
      {
      	//省略
      	static $contents_id = 0;
      	global $bodycache_status;
      	if ( $bodycache_status === 'cached' ) { //bodycacheから取得済み
      		++$contents_id;
      	}
      	//省略
      	$body = & new Body(++$contents_id);
      	//省略
      }
      

追記

改良したbodycache patchを公開しました。

2015/01/23(金)タイトルプラグイン

タイトルプラグイン(PukiWiki)導入

ECO-Wiki (acronia)タイトルプラグインを導入しました。これで、ページ名(URL)とは別に、自由にタイトルを設定できるようになります。

導入した理由ですが、検索エンジンでの検索結果には基本的にタイトルが表示されるので、そこを分かりやすくしたかったからです。あとは、うまく使えば検索結果の上位に表示されやすくなってくれるかな~。

bodycacheとの干渉

タイトルプラグインですが、すんなり導入できるかと思ったら、bodycacheと干渉しました^^;

タイトルはbody部に含まれないので、確かにそのままだとタイトルはキャッシュ対象外になってしまいます。

対策としては、bodycache側を改造して、タイトルもbodycacheファイルに含めるようにしました。(ファイル構造が変わるのでバージョンを1から2に変更。)

追記: 2015/01/24

今のECO-Wikiの構成だと、ページ内の最初の見出しがほぼタイトル相当なので、最初の見出しをタイトルとして使うようにPukiWikiを改造しました。

そのため、わざわざ#titleで指定する必要はほとんどなくなりました。(#titleによる指定も引き続き可能です。)