システム開発者の実験記 このページをアンテナに追加 RSSフィード

2010-12-09

[][]CakePHP/Smartyとのつきあい方 - CakePHP Advent Calendar 2010 9日目

CakePHP Advent Calendar2010 9日目です。


軽い気持ちで参加したので、みなさんが濃いネタでがっつり書かれているので、

おびえてます。。。


さて、今まで、Smartyをさんざん使ってきたので、

癖でCakePHPでも、SmartyViewClassを使って、

Viewの部分は、Smartyを使って書いてます


ヘルパーの呼び出しなんかも楽で、

{$html->css('home', null, null, false)}
{$javascript->link('jquery', false)}

こんな感じで、さくさくっと呼び出しができちゃいます


でも、ヘルパー配列を渡すとなると、困ったことになってしまます

{assign_assoc var='ArrayImage' value='class=>image'}
{$html->image('image/image.gif', $ArrayImage)}

と、事前に配列を作らないといけないんです。


2つも渡すとなると、さらに大変。

{assign_assoc var='ArrayImage' glue="::" value='class=>image::alt=>test'}
{$html->image('image/image.gif', $ArrayImage)}

見た目もきれいではないし、間違いそうで嫌なのです。


そこで、必要な部分はヘルパー拡張しています

<?php
class ExhtmlHelper extends HtmlHelper {
    function img ($path, $class = null) {
		$opt = Array();
        if ($class) {
            $opt['class'] = $class;
        }
        return $this->image($path, $opt);
    }
}

といったヘルパー作成して、コントローラーに追加し、

ビューで呼び出します。


{$exhtml->img('image/image.gif', 'image')}

ちょっとすっきり。

必要な物が出来ると、都度拡張しないといけないので、

悩ましいのですが。


かいい方法があれば、伝授してください。


すいません、もう少し深いネタを用意しておくべきでした・・・


次のCakePHP Advent Calendar 2010の担当は、mon_satさんです。

よろしくお願いしま〜す。

2010-12-01 session_cache_limiter

[]session_cache_limiter

session_cache_limiter("none");

と誰かが書いていたので、マニュアルを見てみたのですが、noneなんてパラメータはない。

しかし、検索すると出てくるので、どういう挙動になるのかと調べてみました。

規定のパラメータ(public・private_no_expire・private・nocache)だと、

start_session()を行ったときに、Cache-Control:ヘッダが送られます

送られる内容については、

http://php.net/manual/ja/function.session-cache-limiter.php

を参照してください。

PHPソースを読んだところ、public・private_no_expire・private・nocache以外の

場合は、ヘッダが送られないとなっています

<?php
session_cache_limiter('none');
session_start();

echo "a";

上記の場合は、Cache-Control:ヘッダは付加されませんでした。

というか、public・private_no_expire・private・nocacheこれ以外だと、

何の文字入れても送られない。'aaaa'でも期待する結果は得られました。

なんか、バッドノウハウ的な気もしますが。

SSL環境下のIEだと、必要な時があるので、役立ちそうです。

2007-06-26

PostgreSQL継承機能

PostgreSQLを長く使っておりますが、こんな機能があるとは知りませんでした。

たまにパーティショニングしたいな〜と思っていたのですが、まだ8.1系には手を出せないので、

これをうまく使えば、楽しくなりそうです。


下記のメインのテーブルを作ります。

 create table t_sales (id serial primary key not null, name varchar(500), number int);

次に、t_sales を継承したテーブルを作成します。

 create table t_sales_01 () INHERITS (t_sales);

実際のデータに関しては、継承したテーブルにいれます。

 insert into t_sales_01 (name, number) values ('test', 1);
 insert into t_sales_01 (name, number) values ('test', 2);

データを参照する場合は、親のテーブルに対しておこなうことで取り出すことができます。

 select * from t_sales;

 id | name | number 
----+------+--------
  1 | test |      1
  2 | test |      2

さらにもう一つ継承したテーブルを作ってみます。

 create table t_sales_02 () INHERITS (t_sales);

こっちにもデータを入れてみます。

 insert into t_sales_01 (name, number) values ('test', 3);

親のテーブルで参照します。

 select * from t_sales;

 id | name | number 
----+------+--------
  1 | test |      1
  2 | test |      2
  3 | test |      3

両方の子テーブルから取り出すことができます。


もちろん、子テーブルだけを参照することもできます。

 select * from t_sales_01;

 id | name | number 
----+------+--------
  1 | test |      1
  2 | test |      2

こんなこともできるみたいです。

 update t_sales set number=4 where id=3;

 select * from t_sales;

 id | name | number 
----+------+--------
  1 | test |      1
  2 | test |      2
  3 | test |      4

意外に知られていない機能な気もします。

大きなテーブル扱うときは、便利だな〜

これからはこいつで、実装してみよう。

2007-06-12

Safariブラウザでの、window.locationの挙動

後輩がはまっていたので、調査していると、Safari・MacIEに関しては、

独特の挙動を持っていました。


Safariで、window.locationが動かないと言われたので、

なんで動かへんねんと思いつつ調査。


確かに、動かないわけなのですが、なんで動かないのかのわからない状態。

色々と調査をしていると、下記のサイトにたどり着きました。

http://snook.ca/archives/javascript/windowlocation/

<script type="text/javascript">
function test3(){
 window.location = 'http://snook.ca/';
}
</script>
<p><a href="#" onclick="window.location = 'http://snook.ca'"> test 1</a></p>
<p><a href="#" onclick="window.location = 'http://snook.ca'; return false;">test 2</a></p>
<p><a href="#" onclick="test3();">test 3</a></p>
<p><a href="#" onclick="test3();return false;">test 4</a></p>
<p><a href="javascript:window.location = 'http://snook.ca';">test 5</a></p>

上記の中で、Safariならびに、MacIE5.2で正常に動くのは、どれでしょうというものでした。

正解は、2と4と5が動いて、1と3は動きません。


なぜかと言いますと、新しいURLとして、window.locationがセットされるのですが、

onclickイベントのあとで、アンカータグhrefがセットされるため、新しいURLは、「#」となってしまいます。

アンカータグhrefがセットされるのを回避するために、return false;が必要となります。


こうやって調べて、ブログに載せるってやっぱり重要ですね。

日本語情報がなかったので、こうやって公開しておきます。

2007-05-29

システムテスター

最近は、開発せずにテスト役に回ってます。

新サービスリリース間近なので、他の人が開発しているサービスのチェック役です。


テストは大変ですけれども、やっていると楽しいですね。

特に、人の裏をかくテストが通ったときはニンマリしてます。

たとえば、2月31日がとおるとか。

チェックしとけよ、と思いつつ、はいバグゲット〜!

って報告あげてます。


ま、これが次の自分の開発にも役立つわけで、

自分が作ったものでは、こんなものはもちろんとおしません。

2007-05-28

何か書こう

さて、またまた間が空いてしまいましたが。

何か書くことを続けようと思います。

って、説得力はありませんが。


今の私に書けているもの、アウトプットすることです。

なので、何か書こうと思います。

書かないと何も始まりませんので。

2007-01-30

[]ethnaさわってみました。

新規にフォームを作ることがあったので、試しにethnaさわってみました。

  • ethnaのもうひとつかなというところ
    • validateの種類が少ない。自作すればいいのかな?

まだ、ちょっとしかさわってないので、こんなところしか書けません。。。

フレームワークも一つ慣れてしまうと、コントローラーがあって、

アクションがあってと決まっているので、別のフレームワークでもちょっとの時間でなじめますね。

もう少し触りつつ、自分のサービスをせっせと作っていきます。