見出し一覧作成スニペット(自作)

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

このページのように本文中の見出しタグを取得して自動的にリストを作成します。 ちょっと前に GitHub に上げたのに3年ほど忘れたままになってました(´•ω•`)

使い方

見出しはネストする場合順番を飛ばさないように記述してください。スニペットのみで使用する場合は見出しに ID が付いているものだけを拾います。

良い例

<h2>
<h3>

悪い例

<h2>
<h4>

ダウンロード

PageHeadline (GitHub)

プラグインで自動的にIDを付ける

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

  • プラグイン名AutoPageHeadLine
  • 登録イベント:OnParseDocument
$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, 'noautophl')) {
        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)

Edited on 2017.04.10 Created on 2017.02.18 Evo Webデザイン 配布ツール アドオン