プログラミングVP初級で学んだこと1

GeekGirlLaboのプログラミングVP初級で学んだことをまとめておく。

cakePHP2系。


データの上下を入れ替えて表示する方法。

favoritesテーブルのデータが表示されているこの表を

スクリーンショット 2021-08-03 13.29.48

こんな感じにデータの入れ替えが出来るようにしたい。
※idで降順、昇順とかではなく、上下ボタンで任意の順番に並び替えが出来るようにする。

スクリーンショット 2021-08-03 13.33.27

まず、このfavoritesテーブルに並び順を保存するorderカラムを作成する。

スクリーンショット 2021-08-03 13.42.01

並び替えボタンの↓をクリックした時は、クリックしたデータの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を入れ替えて保存する。

スクリーンショット 2021-08-03 14.25.05


新規追加画面で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に保存されるようにする。


この記事が気に入ったらサポートをしてみませんか?