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();