.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
15 人のユーザが現在オンラインです。 (14 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 15

もっと...

.
.リンク集

メイン
   CakePHP モデル(Model)
     Sortableビヘイビア:任意の並べ替え
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
news
投稿日時: 2008-7-30 11:04
Cake 職人
登録日: 2007-4-4
居住地:
投稿: 1277
Sortableビヘイビア:任意の並べ替え
テーブルに"order"フィールドがある場合、任意に並べ替えられるようにするビヘイビアだそうです。

SortableBehavior: sort your models arbitrarily
By Dardo Sordi (dardosordi)
http://bakery.cakephp.org/articles/view/sortablebehavior-sort-your-models-arbitrarily
jun
投稿日時: 2009-2-26 15:26
Baker スタート
登録日: 2009-2-26
居住地:
投稿: 2
Re: Sortableビヘイビア:任意の並べ替え
捕捉です

1:A
2:B
3:C
4:D

のとき、Cを2にもっていこうとすると、以下のようになります。

1:A
2:C

4:B
5:D

順番は希望通りなのですが、
歯抜けですと気持ち悪く、他の部分に不具合が出てしまいますので、ソースを追ってみました。

なぜ前述した動作になるのかですが、
beforeSaveでorder値を退避させ、いったんorderに最後尾を退避させています。
これにより、上記の例では以下のような状態で一度セーブされるようです。

1:A
2:B

4:D
5:E

その後、afterSaveで、setPositionが呼び出され、
上がったのか下がったのかをもとに
moveUPかmoveDownを呼び出しています。

つまり5から2に上がるので、
moveUpの動作通り2より大きな値がorderに入っているものをすべて1加算します。
そのため2,4はそれぞれ3,5になり、4が抜けた状態になるようです。


使われている方いらっしゃいましたら不具合がないかお教えいただけますでしょうか?
jun
投稿日時: 2009-2-26 15:37
Baker スタート
登録日: 2009-2-26
居住地:
投稿: 2
Re: Sortableビヘイビア:任意の並べ替え
まちがって編集してしまい、前の自分の投稿を消してしまいました。

64行目の
$isInsert = !$model->id;
でinsertかupdateの判定をしていますが、使われていないので、本来これを使い処理を分ける予定だったなのでは?と勘ぐってしまいます。

使われている方ご報告いただけますと幸いです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .