Я хочу создать простое приложение, которое отображает группу изображений (баннеров), а когда страница перезагружается — оно должно отображать другую группу изображений.
Каждое изображение имеет свойство под названием order
который является целым числом.
Например, когда вы открываете домашнюю страницу в первый раз, три изображения с order
значения в [1, 3, 5] должен отображаться. После перезагрузки страницы, затем изображения с 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]++;
}
}
… и если текущее значение '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] — он останется там, только эта группа изображений будет отображаться независимо от того, сколько раз я обновляю страницу.
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);
}
Попробуйте этот код. Если это не работает, я бы предложил заменить сеанс на куки.
Других решений пока нет …