Drupal → Работа с cookie из Javascript

02.03.2011

В ядро семёрки входит небольшой jQuery плагин — Cookie plugin 1.0, с помощью которого можно из javascript добавлять, изменять и удалять куки.

Перед тем как использовать плагин, его нужно подключить одним из двух способов:

// способ подключения в конструкторе формы
$form['#attached']['library'][] = array('system', 'jquery.cookie');

// общий способ подключения
drupal_add_library('system', 'jquery.cookie');

После этого в js станет доступна ф-я $.cookie:

var myCookie = $.cookie('myCookie'); // получение значения куки myCookie
$.cookie('myCookie', 'some val');    // установка значения куки myCookie
$.cookie('myCookie', null);          // удаление куки myCookie

Пример установки куки с дополнительными параметрами:

$.cookie('myCookie', 'some val', {
  path: Drupal.settings.basePath,
  expires: 365
});

Подробнее.

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Игорь
02.03.2013, 21:50

Ни одного коммента...((( Оставлю первый.
Плагин нужный, удобный. Жаль что я только что о нём узнал. Нужно было как то сохранить для юзера фразу по которой пришел. Куки - самое удобное место. Я пытался как то через сессию(php) - но это даже для зарегиных не правильно работает, видимо мешает кеширование.
Надо внимательней изучать папку: /misc...)))

// установка значения куки myCookie - так правильнее
// если не указать path: '/' - печенюга исчезает при переходе на, например /node/add/page
$.cookie('myCookie', 'some val', {expires: 1, path: '/'});

Ещё пример как можно использовать:

if($.cookie('DRUPAL_UID')) {
  alert('Ваш DRUPAL_UID: "' + $.cookie('DRUPAL_UID') + '"');
}
else {
  alert('Вы аноним.');  
}

Теперь у меня появилось желание составить свой список, а то он пока что только в голове: "Самые используемые плагины jQuery".
Подобное раньше изучал - кто какие модули drupal использует.

Игорь
29.10.2013, 14:08

Опять здесь только я пишу...)))
Как получить куку во вьюсе?
Например сделать представление для анонимов: Вы это смотрели или Вы это хотите сравнить...
И по сложнее: если включено разное кеширование, модуль Boost...

контекстный фильтр по nid - return $nids_from_cookie;

Игорь
04.11.2013, 14:05

Если пропустить аргумент - expires, срок действия cookie истечет с окончанием сессии (при закрытии броузера).

$.cookie('myCookie', 'some val', {path: '/'});
Гость
05.04.2014, 21:08

как в $.cookie положить title страницы а на нужной странице достать title страницы с которой пришел пользователь?

Игорь
06.04.2014, 09:56

Ну это же элементарно, ватсон.

if( !$.cookie('titleEnter') ) $.cookie('titleEnter', $('title'), {path: '/'});

написано актуально для 7ки, но че то не пашет

Игорь
24.09.2014, 23:10

Что не пашет? Трактор на поле?
Пишите конкретно и как можно подробнее. Что делали, куда вставили, что должно получиться... Здесь ванг нету...)))

в preprocess_page(); подключаю drupal_add_library('system', 'jquery.cookie'); в js файле пишу $.cookie('myCookie', 'some val'); в консоле дает ошибку неизвестная функция - $.cookie

Игорь
25.09.2014, 16:29

1. Проверить - подключился ли файл - отключить агрегацию js - найти подключенный файл в - найти файл физически на сервере - /misc/jquery.cookie.js

Кстати, стоит поставить jquery_update - там он обновляется тоже - /sites/all/modules/jquery_update/replace/ui/external/jquery.cookie.js

А вы в js файле обернули функцию - чтобы доллар использовать?
2. В Drupal 7 нужно дополнительно обернуть код в:
(function($) {
...
}(jQuery));

3. Я подключаю в своей теме в template.php

function themename_preprocess_html(&$variables) {
  // Add external libraries.
  drupal_add_library('system', 'jquery.cookie');   
}
Игорь
31.01.2015, 20:37

Хотел сказать, что слишком много кук для домена браузер не разрешит. Обычно это около 20.
Так что лучше использовать массив, но записывать его строкой.
http://javascript.ru/forum/jquery/14048-massiv-v-cookie.html#post85337 - это решение мне показалось удачным.

3. Я подключаю в своей теме в template.php

function themename_preprocess_html(&$variables) {
  // Add external libraries.
  drupal_add_library('system', 'jquery.cookie');   
}

Если подключать так, сайт уходит в циклическую переадресацию, лечится переустановкой global redirect. Непонятно почему...

а как потом эту куку прочитать в php
в js работает
var mail1 = $("#edit-mergevars-email").val();
$.cookie('usermail', mail1);
приложение в браузере куку видит а друпал $mail = $_COOKIE['usermail'];

сорри не дописал друпал не видит

Добавить комментарий