2017-02-20 10 views
0

画像のグループ(バナー)を表示するシンプルなアプリケーションを作成したいときや、ページがリロードされたときに、 。Laravel Sessions:ページをリロードする(リフレッシュ)画像の他のグループを表示する

各画像には、整数であるorderというプロパティがあります。 たとえば、ホームページを初めて開くときは、orderの値が[1、3、5]の3つの画像が表示されます。ページをリロードした後、orderの値が[2、4、6]のイメージが表示されます。ページをもう一度開くと、orderの値が[1、3、5]の画像が再度表示されるはずです。そしてそうで...だから

、基本的には、orderの値[1、3、5]の画像[2、4、6]は、すべてのページのリロードに切り替える必要があります。私は次のことを試してみた私のコントローラで

public function index() { 

    if (!\Session::has('top_order')) { 
     $top_banners = TopBanner::where('position', 'top') 
      ->whereIn('order', [1, 3, 5]) 
      ->orderBy('order') 
      ->get(); 
     \Session::put('top_order', [2, 4, 6]); 
    } else { 
     $next_orders = \Session::get('top_order'); 

     $top_banners = TopBanner::where('position', 'top') 
      ->whereIn('order', $next_orders) 
      ->orderBy('order') 
      ->get(); 

     if ($next_orders[0] == 1) { 
      for ($i = 0; $i < count($next_orders); $i++) { 
       $next_orders[$i]++; 
      } 
     } else { 
      for ($i = 0; $i < count($next_orders); $i++) { 
       $next_orders[$i]--; 
      } 
     } 

     \Session::put('top_order', $next_orders); 
    } 

    return view('welcome')->with('top_banners', $top_banners); 
} 

しかし、いくつかの理由で、画像をトグルされていません。 elseブロックに表示されているように、ページがリロードされたとき(HTTPリクエストが送信され、コントローラのindexメソッドが実行されたとき) - まず、'top_order'セッションから、次のグループの画像を表示します:

$next_orders = \Session::get('top_order'); 

... 'top_order'セッションを更新したい - その値を他の注文グループに設定したい。 'top_order'セッションの現在の値があれば、[1、3、5] - 次いでにアップデート[2 4 6]

 if ($next_orders[0] == 1) { 
      for ($i = 0; $i < count($next_orders); $i++) { 
       $next_orders[$i]++; 
      } 
     } 

...とIF電流値'top_order'セッションがある[2、4、6] - 次いでにアップデート[1、3、5]:最後

 else { 
      for ($i = 0; $i < count($next_orders); $i++) { 
       $next_orders[$i]--; 
      } 
     } 

、保存:

\Session::put('top_order', $next_orders); 

しかし、それはうまくいかず、何が間違っているのか分かりません。 'top_order'セッションが[2、4、6]に設定されると、そこにとどまり、ページを更新した回数に関係なく、そのグループの画像のみが表示されます。

+0

あなたのコードを整理することができます – xhulio

答えて

0
public function index() { 
$first_order = [1,3,5]; 
$second_order = [2,4,6]; 
if (!\Session::has('top_order')) { 
    \Session::put('top_order', $first_order); 
} else { 
    \Session::put('top_order', (\Session::get('top_order') == $first_order) : $second_order ? $first_order)); 
} 
    $top_banners = TopBanner::where('position', 'top') 
     ->whereIn('order', \Session::get('top_order')) 
     ->orderBy('order') 
     ->get(); 

    return view('welcome')->with('top_banners', $top_banners); 
} 

このコードを試してください。それが動作しない場合は、セッションをクッキーに置き換えることをお勧めします。

+0

'put'メソッドは2つの引数を必要とします:*セッションキー*と*セッション値*(' put( 'key'、 'value') ')https://laravel.com /docs/5.2/session。あなたが '\ Session :: put( 'top_order')=(...'。 – PeraMika

+0

を持っているので、あなたの** else **ブロックはうまくいきません。 。 – xhulio

関連する問題