プログラミングVP初級で学んだこと1
GeekGirlLaboのプログラミングVP初級で学んだことをまとめておく。
cakePHP2系。
データの上下を入れ替えて表示する方法。
favoritesテーブルのデータが表示されているこの表を
こんな感じにデータの入れ替えが出来るようにしたい。
※idで降順、昇順とかではなく、上下ボタンで任意の順番に並び替えが出来るようにする。
まず、このfavoritesテーブルに並び順を保存するorderカラムを作成する。
並び替えボタンの↓をクリックした時は、クリックしたデータのorderと、クリックしたデータの1つ下に表示されているデータのorderを入れ替えて保存する。
↑をクリックした時は、クリックしたデータのorderと、クリックしたデータの1つ上に表示されているデータのorderを入れ替えて保存する。
この表に表示されているデータは削除する可能性があるので、orderを+1、-1して保存する方法だと、想定通りの動きをしなくなる。そのためorderを入れ替えて保存する。
↑↓をクリックした時に、クリックしたデータのidをpost送信する。
post送信されてきたidのデータのorderを取得する。(post送信されてきたidのデータをclickDataとする)
find('neighbors')を使って、clickDataの前後のデータを取得する。
['next']でclickDataの次のデータが、['prev']でclickDataの前のデータが取得出来るので、↑をクリックした場合はclickDataと['next']のorderを入れ替えて保存、↓をクリックした場合はclickDataと['prev']のorderを入れ替えて保存する。
新規追加画面でfavaritesテーブルにデータを追加する場合、orderの一番大きい値に+1して保存する。
favoritesテーブルのorderが1,2,3とある場合、次のデータはorderが4になるようにしてデータを保存し、表示する時はorderが1,2,3,4の順番でデータが並ぶようにしたい。
まずfavoritesテーブルのorderの最大値を取得する。
$maxOrder = $this->Favorite->find('first',array('fields' => 'MAX(Favorite.order) as max_order'));
$maxOrderには
array(
0=>array(
'max_order'=>'3'
)
)
という配列でデータが入っているので、
$max = $maxOrder[0]['max_order'];
$maxOrderの0番目のデータのmax_orderと指定するとorderの最大値3が取得できる。
$max+1してFavoritesテーブルのorderに保存されるようにする。
この記事が気に入ったらサポートをしてみませんか?