続・モジュールを作ろう!(6) リスト表示のデフォルト並び順

ずっとお休みしていましたが、一覧表示のデフォルトの並び順をどこで指定すればいいか思い出しましたのでついでに連載ネタにすることにします。

本記事は、Cubson というモジュール生成ツールを使った XOOPS のモジュール作成方法を解説するものです。

Cubson を使ってコード生成が出来る人,モジュールを作るために PHP を自分で調べながら学んでいこうという気がある人が対象です(すでに PHP を知っている人も,もちろん)。
本連載のコピペで何とかならない?,という人ではちょっと厳しいかも。

こんなときに使います

一覧表示(action=XxxList)は、生成したコードではIDの小さい順に表示されます。しかし掲示板などでは、新しい投稿が上に来て欲しいものです。
一覧表示時のデフォルトの並び順は、forms/XxxFilterForm.class.php で指定します。

サンプルコード

forms/XxxFilterForm.class.php

define('ENTRY_SORT_KEY_ENTRY_ID', 1);
define('ENTRY_SORT_KEY_ENTRY_TITLE', 2);
define('ENTRY_SORT_KEY_UID', 3);
define('ENTRY_SORT_KEY_REG_UNIXTIME', 4);

define('ENTRY_SORT_KEY_DEFAULT', ENTRY_SORT_KEY_ENTRY_ID);
define('ENTRY_SORT_KEY_MAXVALUE', 4);

解説

クライアントからのリクエストで指定が無ければ、{table}_SORT_KEY_DEFAULT で指定されたキーで並べ替えが行われます。
上の例では、ENTRY_SORT_KEY_DEFAULT です。これには ENTRY_SORT_KEY_ENTRY_ID が定義に指定されていますが、上のほうを見ると「1」だというのが分かります。このように FilterForm クラスでは、テーブルの各フィールドを数字に置き換えて扱っています。
なぜかというと、正の数字だと昇順、負の数字だと降順、というように判別しやすいようにするためです。

つまり、上のサンプルでは entry_id で昇順に並べる、という指定になっているということです。
「こんなときに使います」で例示したような、新着順に並べる場合は降順なので、ENTRY_SORT_KEY_ENTRY_ID を「-1」にセットしてやればいいのです。

define('ENTRY_SORT_KEY_DEFAULT', '-'. ENTRY_SORT_KEY_ENTRY_ID);

ですね (前提として、entry_id が大きいほど新しいデータ、というのがありますが)。

ちなみに、ENTRY_SORT_KEY_ENTRY_ID が 'entry_id' をあらわすんだ、というのは、ちょっと下の

var $mSortKeys = array(
ENTRY_SORT_KEY_DEFAULT => 'entry_id',

の所で指定しています。