SearchEntries

対応バージョン:MovableType7

MT5.2で使う場合のコアの書き換え方

更新日:2024.02.16

SearchEntriesプラグインでは、カスタムフィールドでの並べ替えが可能です。
ただ、その際にはMovable Typeのコアの書き換えが必要になります。
Movable Type 5.2ベータ2でソースコードを調べたところ、5.1とはコアのコードが若干変わっていました。
そのため、書き換え方もやや異なります。
書き換える箇所は、「lib/MT/ObjectDriver/Driver/DBI.pm」の525行目~547行目の部分です。
以下のように書き換えます。

書き換え前

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

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

if ( $args->{sort} || $args->{direction} ) {
  my $order = $args->{sort} || 'id';
  if ( !ref($order) ) {
      my $tmp_tbl = $args->{sort_class} ? $driver->table_for($args->{sort_class}) : $tbl;
      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)
                  : $dbd->db_column_name( $tbl, $order, $alias ),
              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})
                  : $dbd->db_column_name( $tbl, $ord->{column}, $alias ),
              desc   => $ord->{desc},
              };
      }
      $stmt->order( \@order );
  }
}

なお、プラグイン自体は、既存のものを使うことができます。

前へ
プラグインTOP
目次