プロジェクト

全般

プロフィール

Bug(バグ) #1091

アルバムに登録した画像の表示順の不具合

孝典 高橋ほぼ14年前に追加. 約12年前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2010-05-20
期日:
進捗率:

100%

3.6 で発生するか:
Unknown (未調査)
[QA]バグ通知済:
いいえ
3.8 で発生するか:
Unknown (未調査)

説明

作成したアルバムに画像を登録した際に、
最初に5枚(仮に1,2,3,4,5とする)
その次に5枚(仮に6,7,8,9,10とする)
と登録した場合並び順が
6,7,8,9,10,1,2,3,4,5と現在はなる。
1,2,3,4,5,6,7,8,9,10となった方が自然な動作に思える。

その結果、画像をクリックして大きな画像を表示した際に「次へ」「前へ」の挙動にも不具合が生じる。
「6,7,8,9,10,1,2,3,4,5」の順番のままの場合、「次へ」「前へ」の動作は振られたIDの順序のようなので、
現在先頭にある6番をクリックして「次へ」を押してすすめていくと10番に至った段階で次の1番に進めなくなる。


関連するチケット

次のチケットが重複 opAlbumPlugin - Enhancement(機能追加・改善) #730: アルバムの表示順序を投稿した順番にして欲しい Invalid(無効) 2010-02-22

関係しているリビジョン

リビジョン 830a83ba (差分)
Shogo Kawahara12年以上前に追加

fixed an order of album's image (fixes #1091)

履歴

#1 Minoru Takaiほぼ14年前に更新

アルバムに含まれる画像リストを取得するクエリが次のようになっています。

  • opAlbumPlugin/lib/model/doctrine/PluginAlbumImageTable.class.php (16行目あたり)
$q = $this->createQuery()
    ->where('album_id = ?', $args[0]->id)
    ->orderBy('created_at DESC');

ある投稿による複数の画像の created_at カラム値が同一であるため、例示されている 6,7,8,9,10,1,2,3,4,5 のような不自然な順序で画像が取得されてしまっています。

この画像リストを取得する部分の順序に関する設計を見直すことが本質的な解決に繋がるかもしれません。

1,2,3,4,5,6,7,8,9,10となった方が自然な動作に思える。

あるいは 10,9,8,7,6,5,4,3,2,1 という順序のどちらかが直感的には好ましいように思えます。

#2 Rimpei Ogawa13年以上前に更新

  • 3.6 で発生するかYes にセット

#3 Shogo Kawahara12年以上前に更新

  • 対象バージョン0.9.5 にセット
  • [QA]バグ通知済いいえ にセット

#4 Shogo Kawahara12年以上前に更新

  • 担当者Shogo Kawahara にセット

#5 Shogo Kawahara12年以上前に更新

  • 対象バージョン0.9.5 から 1.0.0 に変更

#6 Shogo Kawahara12年以上前に更新

  • ステータスNew(新規) から Fixed(完了) に変更
  • 進捗率0 から 100 に変更

#7 Minoru Takai約12年前に更新

  • 3.6 で発生するかYes から Unknown (未調査) に変更
  • 3.4 で発生するかUnknown (未調査) にセット

opAlbumPlugin-0.9.4.1 を使っている環境でこの問題が発生し、その解決策を確認するため、今ここにコメントを書き込んでいます。

から、この問題に対する修正内容を確認しました。

  • 0.9.4.1 のリリースコミット (2011/4/9) :ここには 0.9.5 開発中のコミットは含まれていません( 0.9.4 系へのセキュリティリリースです)
    commit 0ad7831f053283e469d788d5cf5c401c2680e3ec
    Author: Kousuke Ebihara <ebihara@tejimaya.com>
    Date:   Sat Apr 9 04:14:17 2011 +0900
    
        version 0.9.4.1
    
  • 0.9.4 のリリースコミット (2010/2/9)
    commit 983d976f25a66257a66a1764b3cdfb34e2a02549
    Author: mogi hiroki <mogi@mogi-MacBook.local>
    Date:   Tue Feb 9 14:01:05 2010 +0900
    
        タグ0.9.4をきる
    
  • 0.9.5 開発中のコミット (2010/6/9)
    commit e50299f392fbe2a10dd2f36cbaa4393fc748583a
    Author: Nguyen Ngoc Tu <tu3009@gmail.com>
    Date:   Wed Jun 9 14:17:08 2010 +0900
    
        added mobile_frontend albumImage/show
    
    diff --git a/lib/model/doctrine/PluginAlbumImageTable.class.php b/lib/model/doctrine/PluginAlbumImageTable.class.php
    index 429cb66..c00e252 100644
    --- a/lib/model/doctrine/PluginAlbumImageTable.class.php
    +++ b/lib/model/doctrine/PluginAlbumImageTable.class.php
    @@ -15,7 +15,7 @@ class PluginAlbumImageTable extends Doctrine_Table
    
           $q = $this->createQuery()
               ->where('album_id = ?', $args[0]->id)
    -          ->orderBy('created_at DESC');
    +          ->orderBy('created_at ASC');
    
           return $this->getPager($q, $args[1], $args[2]);
         }
    
  • 1.0.0 開発中のコミット (2011/9/3)
    commit 830a83ba2b2fc0f24547e7e4f07b3b62a330e56a
    Author: Shogo Kawahara <kawahara@bucyou.net>
    Date:   Sat Sep 3 16:42:46 2011 +0900
    
        fixed an order of album's image (fixes #1091)
    
    diff --git a/lib/model/doctrine/PluginAlbumImageTable.class.php b/lib/model/doctrine/PluginAlbumImageTable.class.php
    index 2b5d14d..a2a661a 100644
    --- a/lib/model/doctrine/PluginAlbumImageTable.class.php
    +++ b/lib/model/doctrine/PluginAlbumImageTable.class.php
    @@ -14,8 +14,7 @@ class PluginAlbumImageTable extends Doctrine_Table
           if ($args[2] == null){ $args[2] = 10;}
    
           $q = $this->createQuery()
    -          ->where('album_id = ?', $args[0]->id)
    -          ->orderBy('created_at ASC');
    +          ->where('album_id = ?', $args[0]->id);
    
           return $this->getPager($q, $args[1], $args[2]);
         }
    

どうやら orderBy 句を外しているようですが、この修正は適切なものでしょうか。ソート基準となる値が同一である(あるいは1秒程度ずれている)日付を基にソートしているのは不適切ですが、そのソートを外すだけで期待する結果となるのでしょうか。

mysql> desc album_image;
+-------------+------------+------+-----+---------+----------------+
| Field       | Type       | Null | Key | Default | Extra          |
+-------------+------------+------+-----+---------+----------------+
| id          | int(11)    | NO   | PRI | NULL    | auto_increment | 
| album_id    | int(11)    | NO   | MUL |         |                | 
| member_id   | int(11)    | NO   | MUL |         |                | 
| file_id     | int(11)    | YES  | MUL | NULL    |                | 
| description | text       | YES  |     | NULL    |                | 
| filesize    | bigint(20) | NO   |     |         |                | 
| created_at  | datetime   | NO   |     |         |                | 
| updated_at  | datetime   | NO   |     |         |                | 
+-------------+------------+------+-----+---------+----------------+

直感的には、明示的な ID によるソート( ORDER BY id DESC あるいは file_id DESC )があるべきではないかと思いました。ところで「0.9.5 開発中のコミット (2010/6/9)」で created_at を降順(DESC)から昇順(ASC)に変更している理由は何でしょうかね。

他の形式にエクスポート: Atom PDF