【MODX】カテゴリー毎にDittoによる子ページ一覧の昇順(ASC)降順(DESC)を切り替える

最近、CrossSystemの一部を変更しました。
CrossSystemでは、普通に記事を書く場合、『通常記事用テンプレート』と名づけたテンプレートを使用しています。テンプレート自体は、[*pagetitle*] と [*content*]を含めた普通のテンプレートです。

ただ一箇所、普通と違うのは、子ページの一覧を表示するかどうかのオプション項目がついているところです。

<div id="contentarea">
<h2>[ *pagetitle* ]</h2>
[*content*]
[[listup_child]]
</div><!-- contentarea ここまで -->

この、[[listup_child]]の部分、何をしているのかというと、カテゴリー毎のトップのページに、子ページの一覧を表示できるようにしているのですが、

↑こんな感じですね。この子ページ一覧を表示するのが[[listup_child]]というスニペットコールになっています。

さて、この記事一覧の表示ですが、カテゴリーのトップページと子ページで、わざわざテンプレートを別にしたりすると、その分テンプレートが増えてしまうので、慣れていない人はどっちを使えばいいか迷いそうです。

その為、テンプレート自体はどちらも『通常記事用テンプレート』を使い、オプションで子ページのリストアップを表示するかどうかを選べるようにしてあります。こうすると、元のテンプレートはひとつだけなので、迷わずに済むと判断しました。

オプションの切り替え設定部分

実は今日の時点まで、この部分の設定は『表示のON/OFF』の2択でした。
しかし、実際に使ってみると、カテゴリー毎に 『子ページ一覧を昇順/降順のどちらでリストアップするか』が違うことに気付き、3択に変更することにしました。それが上の画像です。

例えば、このサイトの『MODX CrossSystem』というカテゴリーでは、古い順からリストアップする昇順での表示が最適ですし、『WEB TIPS』のカテゴリーでは、新しいものが一番上にリストアップされる降順での表示がベストです。

このように、カテゴリー毎に昇順/降順の設定が違う為、急遽変更した次第です。

■[[listup_child]]を構築する手順

では、どんな風にこの機能を構築したかについての説明です。

1.まずは、listup_childという名前のテンプレート変数を作ります。内容は下の画像の通りです。

このテンプレート変数は、『通常記事用テンプレート』に関連付けておきます。

2.dittoでリストアップを表示する際のテンプレートをチャンクで作ります。内容は以下の画像で。

3.最後に、[[listup_child]]という名前のスニペットを作ります。内容は以下のようにしてあります。

<?php
$id = $modx->documentIdentifier;
$tv = $modx->getTemplateVarOutput(listup_child,$id);
$string = $tv[listup_child];

if ($string == "ONasc"){
echo '<h3>■記事一覧■</h3>';
echo '[[Ditto? &tpl=`listupchild_tpl` &orderBy=`menuindex ASC`]]';
} elseif ($string == "ONdesc"){
echo '<h3>■記事一覧■</h3>';
echo '[[Ditto? &tpl=`listupchild_tpl` &orderBy=`menuindex DESC`]]';
}
?>

各リソースのオプション設定で『子ページのリストアップ』の項目を オン(昇順) もしくは オン(降順) にした場合、それぞれの設定に合ったDittoのスニペットコールを吐き出すようにしています。