Top > IT > CMS > Pukiwiki > CustomizeGetsourceInConstructToc
Last-modified: Mon, 07 Oct 2013 10:41:45 JST
Counter:835 Today:1 Yesterday:0 Online:6
このエントリーをはてなブックマークに追加

Skin からページに含まれる最初のヘッダの内容を取得する

About

ツイートボタンなどのソーシャルボタンのために、ページに記述される最初のヘッダの内容を Skin から取得したい場合があります。最初のヘッダの内容を取得するための仕組みは Sonots プラグインで提供されているのですが (firsthead オプション)、なぜか Skin 内では正常に取得できません。そこで Sonots プラグインに含まれる一部のソースコードを変更して、Skin からの呼び出しでもページの記述される最初のヘッダの内容を取得できるようにします。

PHP は不慣れのため、ここでは処理効率の問題はとりあえず無視しています。

toc.class.php の改造

[plugin/sonots/toc.class.php] の construct_toc($page) メソッドを改造します。冒頭か所でページの内容を変数 $lines に取得しているのですが、提供されたままのものでは Skin からの呼び出し時に $lines にページの内容が取得できていないことが分かりました。

変更前

    function construct_toc($page)
    {
        $lines = get_source($page);
        $title = null;
…

変更後

    function construct_toc($page)
    {
		global $vars;
		$lines = get_source($page);
		if(count($lines) == 0)
			$lines = get_source($vars['page']);
…

Skin から取得する

次の手順で先頭のヘッダを取得します。先の項目で construct_toc を修正していないと、ここで get_firsthead 関数(メソッド)を実行しても null が返ります。

toc.class.php を利用するので、ページの読み込み時に一度読み込む必要があります。toc.class.php はその他のプラグインなどから読み込まれているために、既に読み込まれている可能性がありますが、編集ページなどに入るとまず読み込まれないので Skin から利用するときは必ず読み込むようにしておきます。

    require_once(dirname(__DIR__).'/'.PLUGIN_DIR . 'sonots/toc.class.php');
    $tocs = new PluginSonotsToc();
    $tocs->construct_toc($page);
    $firsthead = $tocs->get_firsthead();