Создание динамичной области на JS
YII 2
Есть 3 странички: Страница с товаром, страница корзины и страница бэкенда (action). Товар, при нажатии на кнопку, добавляется в LocalStorage. К кнопке добавления подвязан ID, который берётся из БД. Затем код на JS берёт значение ID и передаёт его ajax'ом на бэкенд, где получается экшеном. Проблема в том, что получив данные, бекенд их не отрисовывает обратно в корзине. Подсказали, что нужно прописать в корзине динамическую область, где будет выводиться список получившихся значений из бэкенда.
Код бэкенда. Получает id из js кода и выводит на страницу корзины переменную с данными ($id_prod)
public function actionJsonans($data_id_prod)
{
// \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$id_prod = Products::find($data_id_prod)
->select([
'product_name',
'product_price'
])
->where([
'ID' => $data_id_prod
])
->one();
// var_dump($id_prod);
// return;
return $this->render('Basket', ['id_prod' => $id_prod]);
}
Код JS скрипта. Отправляет ajax'ом переменную со значением из LocalStorage.
let data_id_prod = localStorage.getItem('id');
console.log(data_id_prod);
if (data_id_prod === '0') {
alert("Корзина пуста");
}
else if (data_id_prod > '0') {
$.ajax({
method: "POST",
url: "http://frontend/jsonans/" + data_id_prod,
data: {$data_id_prod: data_id_prod},
/* success: function(response)
{
alert(response);
}*/
});
}
Ну и код корзины. К ней нужно подключить динамическую область на JS. А в гугле что-т не особо смог найти подобное.
<h1>Ваша Корзина:</h1>
<h2><div class="out"></div></h2>
<div>
<p><h6><?=Html::encode($id_prod->product_name)?> | <?=Html::encode($id_prod->product_price)?></h6></p>
</div>
Ответы (1 шт):
LocalStorage недоступен напрямую в php скрипте, для хранения используй COOKIE. При добавлении товара в корзину JS'ом ты добавляешь COOKIE и по необходимости обновляешь блок Корзины (layout страниц). Список товаров на странице корзины строится на основе переданных COOKIE. Никаких AJAX запросов при добавлении в корзину не требуется.