Je souhaite stocker le code postal d'un utilisateur, s'il l'utilise pour une recherche de proximité dans un cookie. Cependant, je ne sais pas où ni comment commencer à implémenter cela.
Comment puis-je stocker des informations d'utilisateur anonyme sur un cookie?
Depuis Drupal 7, il existe deux fonctions pour stocker des données dans un cookie: ser_cookie_save () , et ser_cookie_delete () . Malgré la fonction noms, les fonctions fonctionnent également pour les utilisateurs anonymes, car ils n'obtiennent pas d'informations de l'objet $user
ou des informations liées à l'ID utilisateur.
comment_form_submit () utilise user_cookie_save()
dans les lignes de code suivantes:
if (user_is_anonymous()) {
user_cookie_save(array_intersect_key($form_state['values'], array_flip(array('name', 'mail', 'homepage'))));
}
Si vous utilisez une version de Drupal qui ne définit pas ces fonctions, vous pouvez implémenter des fonctions similaires dans un module que vous utilisez.
function mymodule_cookie_save(array $values) {
foreach ($values as $field => $value) {
// Set cookie for 365 days.
setrawcookie('Drupal.visitor.' . $field, rawurlencode($value), REQUEST_TIME + 31536000, '/');
}
}
function mymodule_cookie_delete($cookie_name) {
setrawcookie('Drupal.visitor.' . $cookie_name, '', REQUEST_TIME - 3600, '/');
}
Gardez à l'esprit que setrawcookie () est uniquement disponible dans PHP 5. Si vous développez un module qui pourrait être utilisé avec PHP = 4, alors vous devez utiliser setcookie () , et le code des fonctions doit être modifié en conséquence: le paramètre doit être déclaré comme $values
(Pas array $values
), et l'appel à rawurlencode () doit être supprimé car les cookies sont déjà encodés en URL à partir de setcookie()
.
La configuration des cookies dans Drupal n'est pas différente de la façon dont vous le feriez avec un autre site PHP:
setcookie
est la fonction que PHP fournit pour cela. Il y a aussi le $_COOKIE
variable super globale à utiliser.
Exemple de code:
$cookieval = 'my cookie value';
if ($_COOKIE['my_cookie_key'] != $cookie_val) {
setcookie('my_cookie_key', $cookie_val);
}
Si vous avez Drupal installé dans le sous-dossier afin que l'URL racine de votre site ait la forme www.mydomain.com/mysite, vous devriez probablement utiliser base_path () au lieu de '/' lors de la configuration du cookie.
Les fonctions dans la réponse de kiamlaluno seraient alors:
function mymodule_cookie_save(array $values) {
foreach ($values as $field => $value) {
// Set cookie for 365 days.
setrawcookie('Drupal.visitor.' . $field, rawurlencode($value), REQUEST_TIME + 31536000, base_path());
}
}
function mymodule_cookie_delete($cookie_name) {
setrawcookie('Drupal.visitor.' . $cookie_name, '', REQUEST_TIME - 3600, base_path());
}