続・ブログ一覧の並べ替え

MTQを見ていると、以下のような質問が上がっていました。

ブログの並び順序を変更したいと思い、http://www.h-fj.com/blog/archives/2010/04/17-080038.phpを参考にさせていただいたのですがうまくいきません。

当ブログの記事を参考にされているということですので、このご質問に答えてみます。

1.並べ替えの考え方

並べ替えの考え方は、以前に書いた記事と同じです。
大まかには以下の手順になります。

  • ブログに「並び順」を表すカスタムフィールドを追加します。
  • 個々のブログのカスタムフィールドに、並び順を表す値を入力します。
  • MTBlogsタグを使って、ハッシュを組み立てます。
  • ハッシュのキーには、個々のブログの並び順を代入します。
  • ハッシュの値には、出力したい個々のブログの情報を代入します。
  • ハッシュをキー(=個々のブログの並び順)で並べ替えて、値(=個々のブログの情報)を出力します。

以前に書いた記事では、「出力したい個々のブログの情報」は、個々のブログへのリンクだけでした。
一方、今回のご質問では、個々のブログへのリンクだけでなく、そのブログのカテゴリの一覧と、そのカテゴリのブログ記事一覧も出力したいという形になっています。
そこで、ハッシュの値として、ブログへのリンク/カテゴリ一覧/各カテゴリのブログ記事一覧を代入するようにします。

2.実際のテンプレート

ここまでの話に基づいて、実際にテンプレートを作ると、以下のようになります。

<mt:Blogs include_blogs="children">
  <$mt:BlogSortOrder setvar="blog_sort_order"$>
  <mt:SetVarBlock name="blog_list" key="$blog_sort_order">
    <dt>
      <a href="<$mt:BlogURL$>"><$mt:BlogName$></a>
    </dt>
    <dd>
      <mt:TopLevelCategories>
        <mt:HasNoParentCategory>
          <h2><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></h2>
        <mt:Else>
          <h3><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></h3>
        </mt:HasNoParentCategory>
        <mt:HasParentCategory>
          <mt:Entries>
            <mt:EntriesHeader><ul></mt:EntriesHeader>
              <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
            <mt:EntriesFooter></ul></mt:EntriesFooter>
          </mt:Entries>
        </mt:HasParentCategory>
        <mt:SubCatsRecurse>
      </mt:TopLevelCategories>
    </dd>
  </mt:SetVarBlock>
</mt:Blogs>
<mt:Loop name="blog_list" sort_by="key numeric">
  <mt:If name="__first__">
    <dl>
  </mt:if>
  <$mt:GetVar name="__value__"$>
  <mt:If name="__last__">
    </dl>
  </mt:if>
</mt:Loop>

テンプレートの内容は以下の通りです。

1行目/25行目

ウェブサイト配下のブログを順に繰り返します。

2行目

ブログの並び順(MTBlogSortOrderタグ)を、変数blog_sort_orderに代入します。

3行目/24行目

「blog_list」という名前のハッシュに、4~23行目の再構築結果を代入します。
「key="$blog_sort_order"」としていますので、ハッシュのキーとして、変数blog_sort_orderの値(=ブログの並び順)を使うことになります。

4~23行目

出力したい個々のブログの情報を、テンプレートタグを組み合わせて出力する部分です。
dt要素にブログ名を出力し(4~6行目)、dd要素にそのブログのカテゴリとブログ記事の一覧を出力します(7~23行目)。

26/34行目

ハッシュblog_listの内容を、キーの並び順の通りに繰り返して出力します。

27~29行目

繰り返しの最初のときのみ(<mt:If name="__first__">)、dt/dd要素を囲む<dl>タグを出力します。

30行目

ハッシュの値(=個々のブログのブログ名やカテゴリ/ブログ記事の一覧)を出力します。

31~33行目

繰り返しの最後のときのみ(<mt:If name="__last__">)、dt/dd要素を囲む</dl>タグを出力します。