Массив в Cookie

Возможно, у неопытных программистов появится вопрос, зачем может понадобиться записывать массив в cookie.

Как бы это не казалось странным, но cookie это очень полезный механизм позволяющий хранить временные данные, необходимые для функционирования той или иной публичной части сайта, на компьютере пользователя.

Если у вас на сайте пользователь может производить выборку данных по фильтру, к примеру, выбор сотовых телефонов по производителю, модели, цене и т.д., то ему будет приятно увидеть все свои настройки, после ухода и возвращения на сайт.

Массив в cookie с помощью PHP
Вспомним, что куки не позволяют хранить в себе структурированные данные, все что представляется возможным это сохранять пары "Ключ : Значение".

Перед тем как приступить к практике я хочу, чтобы вы вспомнили статью "Формат JSON", она как нельзя лучше сочетается с темой записи массива в cookie, поскольку именно в ней изложено как, представлять сложные структуры данных сериализированной строкой.

Имея конвертированный в строку массив, мы без труда сможем сохранить его в cookies.

И так, пример сохранения настроек фильтра в куки на php:
<?
 $array = array(
     array(
     "name"=>"Основные",
     "field"=>"email",
     "sortdir"=>1,
     "search"=>""
     ),
     array(
     "name"=>"Архив",
     "field"=>"Дата",
     "sortdir"=>-1,
     "search"=>""
     ),
 );
$json = json_encode($array);
 setcookie ("filter", $json);
 ?>

Как видите, я использовал многомерный массив, и тем не менее он был успешно занесен в куки в виде вот такой страшной записи:
[{"name":"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435","field":"email","sortdir":1,"search":""},{"name":"\u0411\u0435\u0437 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430","field":"\u0414\u0430\u0442\u0430","sortdir":-1,"search":""}]

Проверить успешность записи массива в cookie, можно средствами браузера или выполнив строку кода:
echo $_COOKIE['filter'];

Кроме сохранения нам придется в будущем получить все записанные настройки и вернуть им рабочий вид, сделать это можно таким образом:
$array = json_decode($_COOKIE['filter'], true); //возвращаем массиву рабочее состояние
echo "<pre>";
print_r($array); // выводим массив для  проверки
echo "</pre>";

Массив в cookie с помощью jQuery
Опять же призываю внимательно почитать материал статьи "Формат JSON", там можно найти решение для сохранения массива и других структур данных в cookie, но так как заголовок гласит о работе с помощью библиотеки jQuery, я опишу именно этот метод.

Для работы с куками в jQuery предусмотрен плагин jquery.cookie.js (скачать можно будет в конце статьи вместе с исходниками)

Для осуществления задуманного, нам понадобится подключить саму библиотеку jQuery и плагин для работы с cookie. Я сразу приведу готовый кусок кода а затем разберем все по полочкам.
<script type="text/javascript" src="jQuery.js"></script>
<script type="text/javascript" src="jquery.cookie.js"></script>
<script>
$(document).ready(function(){               
    var dataFilter=$.cookie('filter'); // получаем сохраненные ранее настройки             
    var filter = eval(dataFilter); //конвертируем строку в массив              
    // тестируем работу с массивом из cookie
    text = "Фильтр:"
    +"\n-"+filter[1]['name']
    +"\n-"+filter[1]['field']
    +"\n-"+filter[1]['sortdir']
    +"\n-"+filter[1]['search'];
    alert(text);                
    // изменяем данные и обратно сохраняем массив в cookie
    filter[1]['name']="Без договора"
    filter[1]['sortdir']="1";   
    filter[1]['search']="900";                  
    filter=JSON.stringify(filter);//конвертирование в строку              
    $.cookie('filter',filter );//запись в куки                   
    });
</script>

Собственно по полочкам все разобрано в комментариях, поэтому мне остается лишь подтвердить написанное. С помощью плагина jquery.cookie.js, мы получаем значение записи с ключом filter, затем преобразуем полученную строку в JavaScript массив и в дальнейшем выводим некоторые из его полей, а также устанавливаем новые значения и записываем массив обратно в cookie.

Ну, вот теперь мы знаем как можно работать с массивом полученным из cookie, изменять его значения и записывать обратно. Уверяю вас эти скромные знания полученные сегодня еще не раз пригодятся вам в будущем.

Для тек кто хочет работать исключительно в JS и иметь возможность сохранять массив в cookie, а также добавлять в него элементы и редактировать их, я выкладываю следующий скрипт:
$(document).ready(function(){               
    var arr = schitivaem_massiv(); // получаем массив из куков
    alert(arr.length);// выводим количество элементов
    //добавляем в конец массива новую записть (Можно добавить указать любые ключи и значения)
    dobavlyaem_v_massiv({
    "name":"Новая группа",
    "field":"Имя",
    "sortdir":-1,
    "search":""
    });
});
                    
// запись елемента массива в cookie   
function dobavlyaem_v_massiv(obj){                  
    var arr = schitivaem_massiv();//получаем текущее состояние массива
    arr[arr.length]=obj; //добавляем элемент в конец
    var str = JSON.stringify(arr);//конвертируем в строку                    
    $.cookie('arr',str);//записываем массив в куки
}
                                
function schitivaem_massiv(){
    var dataArr=$.cookie('arr');//считываем данные из куков   
        //если массив небы обнаружен, иницилизируем его
        if(dataArr===null){
         dataArr = inicializiruem_massiv();
        //возвращаем инициализированный пустой маасив
         }  
    //возвращаем полученный массив
    return JSON.parse (dataArr);
}
                
//другими словами создаем пустой массив
function inicializiruem_massiv(){           
    var str = JSON.stringify(new Array());//конвертируем в строку                    
    $.cookie('arr',str);//записываем массив в куки 
    return str1;
}

Этот код демонстрирует, то как можно создавать ассоциативные записи и сохранять их в одну куку.

Обратиться к каждому из ключей после считывания массива из куков можно будет таким образом:
alert(arr[0]. name);
alert(arr[0]. field);

alert(arr[1]. name);
alert(arr[1]. field);

и.тд.
Каждый раз при обращении к скрипту, массив из cookie будет попадать на обработку и дополняться новым элементом. Не сложно будет модернизировать код таким образом, чтобы контролировать запись и изменение параметров.
Теги:
Массив, Cookie
Добавлено: 08 Мая 2018 16:55:42 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...