エンジニ屋.com(エンジニヤドットコム)

分かりやすくを意識して情報発信!

【カスタマイズ】商品登録の規格設定でチェック入り商品のみを上位に表示【Eccube4】

実現したいこと

  • 商品登録の規格設定画面でチェック入り無しが入り混じっているので、チェック入りの商品を上位にまとめたい。

開発環境

  • Eccube4

イメージ画像

  • カスタマイズ前
    f:id:enginiya:20211030231806p:plain
  • カスタマイズ後
    f:id:enginiya:20211030231820p:plain

実装開始

src/Eccube/Controller/Admin/Product/ProductClass Constroller.phpの117行当たりに下記ソースコードを追加します。

$visible = [];
$inVisible = [];
//登録規格商品を上位表示
 foreach ($ProductClasses as $c) {
     if ($c['visible']) {
    $visible[] = $c;
    } else{
     $inVisible[] = $c;
   }
 }
$ProductClasses = array_merge($visible,$hidden,$inVisible);

実は以上で、カスタマイズ完了です。 せっかくなので、仕組みを解説したいと思います。

先ずvisibleとinVisibleの空の配列の変数を作成します。 次にforeach文でProductClassesのレコードを順に見て行って、keyがvisibleの値がtrueの場合は、visibleの変数に格納をしていきます。もしfalseの場合は、inVisibleに格納していきます。 visibleとはなんなのか$ProductClasses の中身をdumpで確かめたいと思います。

 dump($ProductClasses);

結果
f:id:enginiya:20211030234215p:plain

見てわかる通り、商品規格ごとのオブジェクトが連想配列で格納されています。
また商品規格にvisibleというカラムが入っています。
1つ目の商品規格にはtrue、2つ目にはnullが入っています。trueとfalseの違いはチェックが入っているかどうかで切り替わります。
なので、このvisibleの値を確認して配列に格納する値を分けています。 最後の行にarray_mergeで格納した2つの配列を結合しています。 これはvisibleがtrueのオブジェクトの配列を前にして、visibleがfalseのオブジェクトの配列を後ろにつなげています。 これが今回使用した並び替えの方法です。
他にもarray_mapを使用した方法などあったりますが、今回の方法はシンプルなので、他の場面でも多く応用が出来ると思います。

それでは以上です。 Have a goot development day!