2019年05月13日に初出の投稿

Last modified: 2019-05-13

Messages でも書いたように、某大学の学生ブログでサイドバーの表示がおかしい(カテゴリーや月別アーカイブの並び順や、配下の記事件数がクリックするたびに変わる)件は、サブカテゴリーだけ表示すると何も出ないので、カテゴリーの階層が混乱しているわけでもなさそうだ。よって、コンテクストを無視して出力したカテゴリーや月別アーカイブの一覧を配列として、それをそのまま出力するしかないであろう。

<mt:ArchiveList archive_type="Monthly" sort_order="descend">

<$mt:Var name="__counter__" zero_pad="3" setvar="SET_KEY"$>

<mt:SetVarBlock name="years" function="push" key="$SET_KEY"><$mt:ArchiveTitle$>|<$mt:ArchiveCount$>|<$mt:ArchiveLink encode_html="1"$></mt:SetVarBlock>

</mt:ArchiveList>

上記は月別アーカイブのアーカイブ名と記事の件数に、アーカイブ・ページへのリンクを張ったリストである。

とりあえずカテゴリー名を3桁のキーで配列に格納するという仕様にしてある。配列に格納するとき、<mt:categories> タグではデータがソートできないというクズ仕様のせいで、キーのとおりに出力すると意味不明な並び方になる(何の順番に並んでるのか推定不能)ため、サイドバーをどのテンプレートで使うかは関係なしに固定したソートで配列を扱えるようにしなくてはいけない。それから、"movable Type 多次元配列" と検索しても、もう候補の5つめを過ぎたら PHP や Excel のマクロについて説明したページが出てくる。よほど多次元配列が使われていないのか、それとも Google の検索が酷過ぎるのか。ちなみに、"movable type" と strict 検索してもだめだ。それと、有名な「小粋空間」も含めて、MT で多次元配列を使う説明が非常にへたくそで、プロのプログラマとして読んでも全く頭に入ってこない。こんな酷い説明のサイトがトップクラスなのだから、やはり目玉の数が少ないコミュニティは劣化するしかないのだろう。

そういうわけで、むやみに多次元配列を使うよりは split した方が楽なので、上記のように years という配列の値として "アーカイブ名|記事件数|URL" と、bar を区切り文字としてデータを格納した。

<ul><mt:loop name="years" sort_by="key">

<li><a href="<mt:Var name="__value__" regex_replace="/.*\|.*\|(.*)/","$1">"><mt:Var name="__value__" regex_replace="/(.*)\|.*\|.*/","$1">(<mt:Var name="__value__" regex_replace="/.*\|(.*)\|.*/","$1">)</a></li>

</mt:loop></ul>

後から表示するときは、上記のように正規表現で必要な個所のデータだけを抜き出してある。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook