SearchEntriesプラグインをMT5.1xで使う場合のコアの書き換え方

SearchEntriesプラグインでは、カスタムフィールドでの並べ替えが可能です。
ただ、その際にはMovable Typeのコアの書き換えが必要になります。

先日、SearchEntriesプラグインをMovable Type 5.1xで使う場合の書き換え方法について、ご質問をいただきました。
そこで、Movable Type 5.1xでの書き換え方法を紹介します。

書き換える箇所は、「lib/MT/ObjectDriver/Driver/DBI.pm」の524行目~548行目の部分です。
以下のように書き換えます。

書き換え前

if ( $args->{sort} || $args->{direction} ) {
    my $order = $args->{sort} || 'id';
    my $pfx = $orig_args->{alias} ? $orig_args->{alias} . '.' : '';
    if ( !ref($order) ) {
        my $dir = $args->{direction}
            && $args->{direction} eq 'descend' ? 'DESC' : 'ASC';
        $stmt->order(
            {   column => $pfx . $dbd->db_column_name( $tbl, $order ),
                desc   => $dir,
            }
        );
    }
    else {
        my @order;
        foreach my $ord (@$order) {
            push @order,
                {
                column => $pfx
                    . $dbd->db_column_name( $tbl, $ord->{column} ),
                desc => $ord->{desc},
                };
        }
        $stmt->order( \@order );
    }
}

書き換え後(赤字の部分を追加/変更)

if ( $args->{sort} || $args->{direction} ) {
    my $order = $args->{sort} || 'id';
    my $pfx = $orig_args->{alias} ? $orig_args->{alias} . '.' : '';
    my $tmp_tbl = $args->{sort_class} ? $driver->table_for($args->{sort_class}) : $tbl;
    if ( !ref($order) ) {
        my $dir = $args->{direction}
            && $args->{direction} eq 'descend' ? 'DESC' : 'ASC';
        $stmt->order(
            {   column => $args->{sort_alias}
                    ? $args->{sort_alias} . '.' . $dbd->db_column_name($tmp_tbl, $order)
                    : $pfx . $dbd->db_column_name( $tbl, $order ),
                desc   => $dir,
            }
        );
    }
    else {
        my @order;
        foreach my $ord (@$order) {
            my $tmp_tbl = $ord->{sort_class} ? $driver->table_for($ord->{sort_class}) : $tbl;
            push @order,
                {
                column => $ord->{sort_alias}
                    ? $ord->{sort_alias} . '.' . $dbd->db_column_name($tmp_tbl, $ord->{column})
                    : $pfx . $dbd->db_column_name( $tbl, $ord->{column} ),
                desc => $ord->{desc},
                };
        }
        $stmt->order( \@order );
    }
}

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください