見出し一覧作成プラグイン・スニペット

更新日
2017.07.29
作成日
2017.02.18

移行作業中のため一部のページが正しく表示されていない場合があります(o-ω-))

自作の MODX Evo 用ヘッドライン作成スニペットです。

このページのように本文中の見出しタグを取得して自動的にリストを作成します。

スニペット版

スニペット版を単独で使用する場合は見出しに ID が付いているものだけを拾います。

<h2 id="heading1">インデックスに拾う</h2>
<h2>インデックスに拾わない</h2>

ダウンロード

PageHeadline (GitHub)

スニペット版補助プラグインで自動的にIDを付ける

以下のスニペット版専用のプラグインと併用すると、ID を付けていない見出しタグに自動でIDを付けます。拾いたくない見出しにはクラス名か適当な属性で「noindex」を付けてください。

  • プラグイン名:AutoPageHeadLine
  • 登録イベント:OnLoadWebDocument
$modx->documentObject['content'] = preg_replace_callback("/<(h[1-6])(.*?)>(.*?)<\/\\1>/is", function ($arg) {
    static $indexs = [];
    $tag = $arg[1];
    $attr = $arg[2];
    $val = $arg[3];
    $key = urlencode(strip_tags($val));
    if (!stristr($attr, ' id="') && !stristr($attr, 'noindex')) {
        if (!array_key_exists($key, $indexs)) {
            $indexs[$key] = 0;
        }
        $indexs[$key]++;
        $key = $key .'-'. $indexs[$key];
        $id = sprintf(' id="%s"', $key);
    }
    return "<{$tag}{$attr}{$id}>{$val}</{$tag}>";
}, $modx->documentObject['content']);

注意

スニペットとプラグインを別々にしている性質上、スニペットで動的に作成されたタグには自動で付きません。スニペット側でIDを付けてタグを作成するか、まとめて1個のプラグインにしてください…(っ'ロ'c)