Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

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

Всем привет!
Есть сайт где имеется список товаров. У каждого товара есть иконка "Избранное".
Подскажите пожалуйста, как сделать так что бы при клике на данную иконку, товар попадал в куки. Делаю я это что бы люди могли закидывать товары себе как бы в избранное (не авторизовываясь на сайте). За ранее спасибо! Пишу на php.

По дате
По рейтингу
Аватар пользователя
Профи

На php такое не делается, используй JS -fetch или ajax. Создай функции добавлении, получение и удаления куки, вот пример моего модуля vanila JS:

123456789101112131415161718192021222324
 /* 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 запрос на сервер и в ответе выводишь список товаров

Аватар пользователя
Мудрец

это лучше делать JavaScript - ом, не надо будет перезагружать страницу

Аватар пользователя
Мудрец
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
 Для сохранения выбранных товаров в куки можно использовать следующий подход: 
 
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 '<div>' . $product['name'] . '</div>'; 
    } 
}