カスタマイズされたコンテンツを提供するために、サイトのすべてのユーザーに「宛先」Cookieを設定したいと思います。 Cookieはログイン/ログアウト後も保持される必要があるため、ログイン/ログアウト時にクリアされるjSessionを使用できないようです。
私はこれを昔ながらの方法で達成することができます
setcookie( "destinationcookie", $_POST['destination'], strtotime( '+90 days' ) );
$destination = isset($_POST['destination']) ? $_POST['destination'] : $_COOKIE["destinationcookie"];
...しかし、joomlaはどこかに隠されたより良い方法を持っていると確信しています。 PS-これに関するドキュメントは、私が知る限り、事実上存在しません。
Cookie認証プラグインを確認してください。永続的なCookieを設定して読み取ります。
それはここにあります: https://github.com/joomla/joomla-cms/tree/staging/plugins/authentication/cookie
クッキーを読むには、
$app = JFactory::getApplication();
$cookieValue = $app->input->cookie->get($cookieName);
クッキーを設定するには、
$app = JFactory::getApplication();
$app->input->cookie->set($cookieName, $cookieValue, time() + $lifetime, $app->get('cookie_path', '/'), $app->get('cookie_domain'), $app->isSSLConnection());
一部のドキュメントはAPIページにあります: http://api.joomla.org/cms-3/classes/JInputCookie.html
前回この領域について調査したとき(2013年3月)、JInputを使用していないこのソリューションを見つけました。
JFactoryがJSessionを呼び出す方法を調べましたが、データを保存するときに有効期限を設定する方法が見つかりませんでした。
システムプラグイン内で、メソッドonAfterRender()
を使用
$cookie = session_get_cookie_params();
$cookie['lifetime'] = DESIRED LIFETIME;
session_set_cookie_params($cookie['lifetime'], $cookie['path'], $cookie['domain'], $cookie['secure'], true);
私が見つけた唯一の逆引きは、同じ名前と内容の2つのCookieが存在することです。私は副作用に気づきませんでした。
お役に立てれば。
次のようなものを使用してみてください。
$input = JFactory::getApplication()->input;
$cookie = $input->cookie;
$post = $input->post;
$cookie->set('destinationcookie', $post->get('destination'), strtotime( '+90 days' ));
$destination = isset($post->get('destination')) ? $post->get('destination') : $cookie->get($name = 'destinationcookie', $defaultValue = null);