[cakePHP] Paginator->sortのデフォルトのソート方向を変更

cakePHPのPaginatorってスゴく便利でよく使ってるのですが、Paginator->sortで作るlinkのデフォルトのソート順を変更したかったのでソース追っかけてみた。
ソート順のデフォルトがascなのですが、ネタ的にdescでソートされてほしかったのです。

cakePHP 1.3.2ね
で目的のメソッドは cake/libs/view/helpers/paginator.php にありましたので
単純にデフォルトのdirectionがascなのをdescにしただけでおしまい


function sort($title, $key = null, $options = array()) {
$options = array_merge(array('url' => array(), 'model' => null), $options);
$url = $options['url'];
unset($options['url']);

if (empty($key)) {
$key = $title;
$title = __(Inflector::humanize(preg_replace('/_id$/', '', $title)), true);
}
//$dir = isset($options['direction']) ? $options['direction'] : 'asc';
//↑を↓にしただけ
$dir = isset($options['direction']) ? $options['direction'] : 'desc';
unset($options['direction']);

$sortKey = $this->sortKey($options['model']);
$defaultModel = $this->defaultModel();
$isSorted = (
$sortKey === $key ||
$sortKey === $defaultModel . '.' . $key ||
$key === $defaultModel . '.' . $sortKey
);

if ($isSorted) {
$dir = $this->sortDir($options['model']) === 'asc' ? 'desc' : 'asc';
$class = $dir === 'asc' ? 'desc' : 'asc';
if (!empty($options['class'])) {
$options['class'] .= ' ' . $class;
} else {
$options['class'] = $class;
}
}
if (is_array($title) && array_key_exists($dir, $title)) {
$title = $title[$dir];
}

$url = array_merge(array('sort' => $key, 'direction' => $dir), $url, array('order' => null));
return $this->link($title, $url, $options);
}

CakePHP 1.3によるWebアプリケーション開発―オープンソース徹底活用
掌田 津耶乃
秀和システム
売り上げランキング: 11952
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
Filed under: cakePHP,Programming — maesan 11:42 PM