Cookieで近接検索に使用する場合、ユーザーの郵便番号を保存します。ただし、これをどこからどのように実装し始めるのかわかりません。
匿名ユーザーの情報をCookieに保存するにはどうすればよいですか?
Drupal 7なので、Cookieにデータを保存する関数は ser_cookie_save() と ser_cookie_delete() の2つがあります。名前の場合、これらの関数は_$user
_オブジェクトまたはユーザーIDに関連する情報から情報を取得しないため、匿名ユーザーに対しても機能します。
comment_form_submit() は、次のコード行でuser_cookie_save()
を使用します。
_if (user_is_anonymous()) {
user_cookie_save(array_intersect_key($form_state['values'], array_flip(array('name', 'mail', 'homepage'))));
}
_
その関数を定義していないDrupalのバージョンを使用している場合は、使用するモジュールに同様の関数を実装できます。
_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, '/');
}
_
setrawcookie() は、PHP 5.でのみ使用できます。PHP = 4、次に setcookie() を使用し、それに応じて関数のコードを変更する必要があります。パラメータは_$values
_(_array $values
_ではなく)として宣言する必要があります、 Cookieはすでにsetcookie()
からURLエンコードされているため、 rawurlencode() の呼び出しを削除する必要があります。
DrupalでのCookieの設定は、他のPHPサイトでの方法と同じです。
setcookie
は、PHPがこのために提供する関数です。$_COOKIE
使用するスーパーグローバル変数。
コード例:
$cookieval = 'my cookie value';
if ($_COOKIE['my_cookie_key'] != $cookie_val) {
setcookie('my_cookie_key', $cookie_val);
}
Drupalがサブフォルダーにインストールされており、サイトのルートURLの形式がwww.mydomain.com/mysiteである場合、Cookieを設定するときに「/」ではなくbase_path()を使用する必要があります。
Kiamlalunoの回答の関数は次のようになります。
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());
}