Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Запоминание элементов в куки

Ден Але Ученик (60), на голосовании 1 год назад
Всем привет!
Есть сайт где имеется список товаров. У каждого товара есть иконка "Избранное".
Подскажите пожалуйста, как сделать так что бы при клике на данную иконку, товар попадал в куки. Делаю я это что бы люди могли закидывать товары себе как бы в избранное (не авторизовываясь на сайте). За ранее спасибо! Пишу на php.
Голосование за лучший ответ
Professional Professional Мудрец (15955) 1 год назад
 Для сохранения выбранных товаров в куки можно использовать следующий подход: 

1. При клике на иконку "Избранное" отправляйте AJAX-запрос на сервер, передавая идентификатор товара.
2. На сервере получите идентификатор товара из запроса и проверьте, есть ли он уже в куки.
3. Если товара еще нет в куки, добавьте его в массив избранных товаров и сохраните массив в куки.
4. Если товар уже есть в куки, удалите его из массива избранных товаров и обновите куки.
5. При загрузке страницы проверьте наличие куки с массивом избранных товаров и отобразите их на странице.

Пример кода на PHP для добавления товара в куки:

```php
// Получаем идентификатор товара из запроса
$product_id = $_POST['product_id'];

// Получаем текущий массив избранных товаров из куки
$favorite_products = isset($_COOKIE['favorite_products']) ? json_decode($_COOKIE['favorite_products'], true) : [];

// Добавляем товар в массив избранных товаров, если его там еще нет
if (!in_array($product_id, $favorite_products)) {
$favorite_products[] = $product_id;
}

// Сохраняем массив избранных товаров в куки
setcookie('favorite_products', json_encode($favorite_products), time() + 3600 * 24 * 30, '/');
```

Пример кода на PHP для удаления товара из куки:

```php
// Получаем идентификатор товара из запроса
$product_id = $_POST['product_id'];

// Получаем текущий массив избранных товаров из куки
$favorite_products = isset($_COOKIE['favorite_products']) ? json_decode($_COOKIE['favorite_products'], true) : [];

// Удаляем товар из массива избранных товаров, если он там есть
if (($key = array_search($product_id, $favorite_products)) !== false) {
unset($favorite_products[$key]);
}

// Обновляем куки с массивом избранных товаров
setcookie('favorite_products', json_encode($favorite_products), time() + 3600 * 24 * 30, '/');
```

Пример кода на PHP для отображения избранных товаров на странице:

```php
// Получаем массив избранных товаров из куки
$favorite_products = isset($_COOKIE['favorite_products']) ? json_decode($_COOKIE['favorite_products'], true) : [];

// Запрос к базе данных для получения информации о товарах
// ...

// Отображаем список избранных товаров
foreach ($products as $product) {
if (in_array($product['id'], $favorite_products)) {
echo '
' . $product['name'] . '
';
}
}
партнер [www.a77r.ru] Мыслитель (8983) 1 год назад
это лучше делать JavaScript - ом, не надо будет перезагружать страницу
Emods Профи (916) 1 год назад
На php такое не делается, используй JS -fetch или ajax. Создай функции добавлении, получение и удаления куки, вот пример моего модуля vanila JS:
 /* cookie set get */ 

export function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
export function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
export function eraseCookie(name) {
document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
Дальше на кнопку добавить в избранное вешаешь onclick или получаешь queryselectorall все кнопки и вешаешь на них addeventlistener, и в куки записываешь товар с id. Там где надо вывести товары - избранные, получаешь из куки товары, делаешь fetch или ajax запрос на сервер и в ответе выводишь список товаров
Похожие вопросы