TreeOrder v1.2.0 リリース

公開日:

非公開アイテムをスキップして並び順を維持する挙動に変更

TreeOrder で並び順を制御していたアイテムが非公開(下書き・公開停止・予約投稿)になったとき、テンプレートの出力からそのアイテムだけがスキップされ、公開中のアイテムは元の順番のままで表示されるようになりました。お客様からのご要望に対応した変更です。

これにより、Movable Type 標準の <mt:Contents> や <mt:Entries> と同じ感覚で TreeOrder のタグをお使いいただけます。フロント公開テンプレートに下書きが意図せず出力されてしまう潜在的な不具合も同時に解消されます。

変更内容

  • <mt:TreeOrder> および入れ子の <mt:TreeOrderAncestors> / <mt:TreeOrderDescendants> / <mt:TreeOrderChildren> / <mt:TreeOrderParent> / <mt:TreeOrderSiblings> / <mt:TreeOrderHasChildren> / <mt:TreeOrderHasParent> は、デフォルトで公開ステータスが「公開」のアイテムのみを出力します。
  • limit / offset および <mt:TreeOrderIsFirst> / <mt:TreeOrderIsLast> の判定基準を、実際に出力されるアイテム数に揃えました。非公開アイテムが含まれていても期待どおりの件数で動作します。
  • <mt:TreeOrder> に include_unpublished 属性を追加しました。include_unpublished="1" を指定すると、v1.1.0 以前と同じ「全ステータスを出力する」挙動を復元できます。指定した挙動は内側の関連タグにも自動的に引き継がれます。

テンプレート例

<!-- デフォルト動作: 公開中のアイテムのみ、非公開は自動スキップ -->
<mt:TreeOrder class="content_data" content_type="ニュース">
  <li><mt:ContentLabel></li>
</mt:TreeOrder>

<!-- 従来挙動を維持: 全ステータスを含める -->
<mt:TreeOrder class="content_data" content_type="ニュース" include_unpublished="1">
  <li><mt:ContentLabel></li>
</mt:TreeOrder>

影響範囲

  • 記事・ウェブページ・コンテンツデータのいずれの class でも同じく公開ステータスのフィルタが効きます。
  • 通常の運用ではテンプレートの修正は不要です。プラグインを差し替えていただくだけで、非公開のアイテムが自動的にスキップされるようになります。
  • v1.1.0 以前の動作を必要とする箇所がある場合は、外側の <mt:TreeOrder> に include_unpublished="1" を追加してください。
  • <mt:TreeOrderHasParent> も、親オブジェクトが非公開でスキップされている場合は偽を返すよう挙動を整えました。<mt:TreeOrderParent> の出力と判定結果が一致します。

動作確認

開発環境(Movable Type 9.1.0)で、コンテンツタイプ「Site Page」配下に以下の構造を用意し、A-1 と B を非公開に変更したうえで動作を検証しています。

  • Site Page A(公開)
    • Site Page A-1(非公開)
      • Site Page A-1-1(公開)
  • Site Page B(非公開)
    • Site Page B-1(公開)
  • Site Page C(公開)

デフォルト動作では A → A-1-1 → B-1 → C の順で公開中のアイテムのみが出力され、limit や <mt:TreeOrderIsFirst> / <mt:TreeOrderIsLast> も実際に出力されるアイテム基準で正しく動作することを確認しました。include_unpublished="1" を指定すれば全 6 件が出力され、v1.1.0 以前と同じ挙動になります。