cookieでCSSを操ろう

  • たとえばCSSを複数用意する。
  • 訪問者にCSSを選んでもらう。
  • 次に来たときには選んだCSSで表示する。

それではどうしようか。

一般的な方法としてどうなのかはよくわからんけど、とりあえずcookieで何とかできないものかと考えたわけで。

cookieにCSSの情報を記録しておこうではないか(・∀・)b

基本的に知っておくべきこととしては

  • cookieは発行したサイトにアクセスしたときに勝手に情報を送信する
  • 送信された情報はサーバ側で環境変数として使用可能

ということくらいだろうか。

Zopeでcookieに関連したものとしては「setCookie()」というのがあるようだ。

<dtml-call expr="RESPONSE.setCookie('クッキーに保存する変数の名前', '値', expires='日付')">

みたいなふうにするらすぃ(他にもオプションはある)。

のでこれを使うことにするナリ。

プルダウンメニューでCSSを選ばせるのはこの前考えたこれを利用する。でもって、選んでもらったCSSをcookieに保存しておけばいいですかな。

ふだんはNagosui_cssというCSSを適用しているけど、ここでNagosui_css_2というもう一つのCSSを用意し、cssという変数によって変えることにしよう。

ということでプルダウンメニューの部分はこんな感じで。

<form method="post" action="index_html">
  <select name="css">
    <option value="none" selected disabled >Select CSS</option>
    <option value="default">default</option>
    <option value="dark">dark</option>
  </select>
  <input type="submit" value="Change">
</form>

#value="default"を選んだ場合にはNagosui_cssを、#value="dark"を選んだ場合にはNagosui_css_2を適用するようにする。

cssという変数にdefault/darkという値をぶち込んでPOSTするのだヾ(*`Д´)ノ

ということでサイトのヘッダ部分は、REQUESTの中にcssという変数があるかどうかによって条件分岐。

<dtml-try>
  <dtml-if expr="REQUEST.css == 'default'">
    <style type="text/css" media="all">@import "Nagosui_css";</style>
     <dtml-call "RESPONSE.setCookie('css', 'default', expires=(ZopeTime() + 30).rfc822())">
  <dtml-elif expr="REQUEST.css == 'dark'">
    <style type="text/css" media="all">@import "Nagosui_css_2";</style>
     <dtml-call "RESPONSE.setCookie('css', 'dark', expires=(ZopeTime() + 30).rfc822())">
  <dtml-else>
    <style type="text/css" media="all">@import "Nagosui_css";</style>
     <dtml-call "RESPONSE.setCookie('css', 'default', expires=(ZopeTime() + 30).rfc822())">
  </dtml-if>
<dtml-except>
    <style type="text/css" media="all">@import "Nagosui_css";</style>
     <dtml-call "RESPONSE.setCookie('css', 'default', expires=(ZopeTime() + 30).rfc822())">
</dtml-try>

expiresの書き方に少しとまどったのだけど、ZopeTime()は日付でカウントしているということをどこかで読んだことがあったので、そ れをrfc822フォーマットで出力すればよいと考えて、無事書くことができました。ここでは一応30日間保存しておくように設定しておきまふ (ZopeTime()+ 30のところ)。

とりあえず今回も一応予想通りの動きはしてくれたのでホッと一安心です。

あんまりスマートじゃないような気がしないでもないですが(*´Д`)…

ということで完成図はこちら
カテゴリ
Zope Zope
Design
トラックバック用URL:
http://nagosui.org/Nagosui/COREBlog2/48/tbping
コメントを追加

下のフォームに記入してコメントを追加できます。平文テキスト形式。

(必須)
(必須)
(必須)
(Required)
Enter the word

このBlogについて
Plone, Zope, Pythonなどのトピックについてのメモです。
カテゴリ
Plone (99)
Plone Products (23)
COREBlog2 (31)
COREBlog1 (29)
ReadingCOREBlog (7)
Zope (66)
Turbogears (18)
Django (12)
Python (26)
Linux (32)
Nagosui (13)
Design (34)
Misc (49)
moblog (5)
最近のエントリ
Plone3.2+その他もろもろのレシピ nyusuke 2009年01月07日
さらばファッキンKDDI nyusuke 2008年12月10日
Xoopsのテーマをいじる1 nyusuke 2008年12月08日
第13回名古屋大学吹奏楽団定期演奏会 nyusuke 2008年12月07日
最近のコメント
Re:WebデザイナーのためのDjangoはじめの一歩 nyusuke 2007年06月01日
Re:WebデザイナーのためのDjangoはじめの一歩 pateo 2007年05月31日
Re:東海Python Workshop 01終了 nyusuke 2007年05月31日
Re:東海Python Workshop 01終了 kfuruhata 2007年05月30日
Geek Test
I am 30% Geek.
Geek? Yes, but at least I got social skills.
You probably work in computers, or a history deptartment at a college. You never really fit in with the "normal" crowd. But you have friends, and this is a good thing.