2008/10/19

[php]Smartyでsubstr

前回、実習時にSmarty上でsubstrをかます機会があったので、やり方を調べました。

<tr><td>{$ym|substr:0:4}年{$ym|substr:4:2}月</td></tr>

via:[備忘][Smarty]Smartyでsubstr():まさぶログ

<tr><td>{$ym|substr:0:4}年{$ym|substr:4:2}月</td></tr>
{assign var=colspan value=$response.pictNumList.DATA[$st_code]|@count}

via:[PHP][Smarty]すべてのPHP関数は、暗黙的に修飾子として...:まさぶログ

と、変数|substr:num1:num2でいけるみたいで、num1は、何文字目(上のブログから0スタートだと思われる)から、num2は何文字分抜き出すか?というパラメータだと推測される。

ってことでためしに、2008-03-04という日付を2008年03月04日にするという処理を考えてみると、下のようになると思います。

{$yyyy-mm-dd|substr:0:4}年{$yyyy-mm-dd|substr:5:2}月{$yyyy-mm-dd|substr:8:2}日

で確かに上を実行してみると、2008年03月04日と表示することができました。

2008/10/18

[php]非同期でサーバーにPOSTした時

クライアントで処理を行うA.htmlと、サーバーで処理を行うB.phpがあったとします。

A.htmlはjavascriptで、B.phpファイルにPOSTでパラメーターを送信するとき(俗に言うajax)、注意したいのが、その送信された、パラメータの取得方法。

ColdFusionの場合は、単純に、変数名で取得できたのですが、phpは、$_POST["変数名"]で書かないと取得できないみたいです。

どうしてこれに気がついたのかというと、最初、$変数名でソースを書いていたのですが、いっこうに取得できず、マニュアルをみたら$_POST — HTTP POST 変数という説明をみて、「ひょっとしたら」と思って試したらできたのです。

確かに、JavaScripからPOST通信しているわけですか、理にかなっているわけです。

追記
ちょっと書いた記事に納得がいかなかったので、ソースレベルで書いていきたいと思います。

Aのプログラムが下のようになっていたとします。

<input type="text" name="hoge" value="">

<script type="text/javascript">

/* IE */
if(Prototype.Browser.IE){
httpObj = new ActiveXObject("Msxml2.XMLHTTP");
・・・処理が続く
/* FireFox */
}else{
httpObj = new XMLHttpRequest();
・・・処理が続く

}
httpObj.setRequestHeader('Content-Type'
, 'application/x-www-form-urlencoded');
httpObj.send('パラメータ名1=値1&パラメータ名2=値2・・・・');
</script>

で、この時にBでは、もらったパラメーターを下のようにして取得します。

$_POST["パラメータ1"];
$_POST["パラメータ2"];
・・・

これで、非同期のパラメータ処理もうまくできるかなと

[php]現在のディレクトリは、getcwdで

マニュアルによると現在いるディレクトリはgetcwd()で取得できるみたいです。

2008/10/17

[php]関数を使う時の注意事項

一般にcfで、ビルトイン関数は、大文字、小文字気にせず、いけますが、phpでは、小文字で書いた方がいいみたいです。

忘れないうちにメモしました。

2008/10/16

[php]フォーム、クッキー、セッション参照時に注意

一般に、フォーム変数、クッキー変数、セッション変数を参照する時に注意したいのが、「_」以降は大文字であること

/* form変数 */
$_POST
/* session変数 */
$_SESSION
/* cookie変数 */
$_COOKIE

開発時に気をつけたいところです。

2008/10/15

[php]Smartyで、外部ファイルを参照するときの注意点

さっきまで、セミナーで使うログイン画面を作っていたんだけど、その時に、つまずいてしまったことをメモしようかなと。

Smartyを使って開発するときに、htmlファイル内に、scriptタグで、外部ファイルを参照するときや、linkタグを使って、外部のCSSファイルを参照するとき、または、imgタグのsrcで、外部ファイルを参照するときは、phpファイルを置いてある場所にしないとエラーが起きてしまうようです。

最初、htmlファイルを置いてある場所に、同じように外部ファイルも置いていたので、エラーがでまくっていて、どうしてかなーと思っていたのですが、ブラウザには、phpファイルでアクセスするので、ディレクトリ構造を考えると当たり前と言っては当たり前なのかもしれないですが。。。

とにかく気をつけたいですね。

2008/10/14

[思い出]同期の結婚式

この前の、日曜日、同期の結婚式がありました。

主催する側になったことはあるのですが、参加する側になったのは初めてだったので、ものすごく楽しみでした。

なんとか、下ネタも、ルネッサーンスも言わず(妻にうざいから、絶対に言うなと止められてた。)2次会終了間際まで楽しくすごすことができましたが、その後は。。。

関係者の皆様、大変、ご迷惑をおかけしました。

うーーーん、お酒は、もうこりごりっす。

特にタクシーで自宅まで送ってくれた、N君と、A君、本当にありがとうございます。

Photobucket

上の写真は、結婚式が終わった後の会場!!
実は、納涼会と同じ場所に、池袋のリビエラ

新郎新婦共にめっちゃよかったです♪
ブログに掲載できないのが残念(肖像権の都合上)

本当に末永くお幸せに!!

2008/10/12

[php]Smartyで、JavaScriptを使うときの注意点

htmlファイル内で、JavaScriptを書きたいときに、そのまま書いてしまうとエラーになってしまうようです。

エラーの内容をみる限り、レンダリングエラーだと思って、いくつか調べてみると的中。

回避方法として、scriptタグの上に、{literal}を使い、閉じタグの下に{/literal}を使えば回避できるみたいです。

参照サイト
BooLog 1.0:SmartyとJavaScript

{literal}
<script language="JavaScript" type="text/JavaScript">
<!--
function func() {
なんとか;
}
//-->
</script>
{/literal}

via:SmartyとJavaScript

2008/10/11

[php]関数内で、グローバル変数の参照

関数内では、_POST配列や、_SESSION配列などを引数に渡さなくとも、参照できるみたいです。

これってすごく便利かなと。

だって、引数にわざわざ、むっこむ必要がないのだから。

[php]関数内の変数宣言が、暗黙的にローカル変数

昨日、質問したのですが、関数内で変数を行ったとき、暗黙的にローカル変数となるみたいです。

例えば、下のようなファンクションがあったとします。


function hoge($args1){
$foo = "Hello".$args1."さん。";
return $foo;
}

この時、返り値として、「Hello引数さん。」と返すのですが、このファンクション内で使われている$fooは、自動的にローカル変数となり、呼び出し元で、この変数を参照しようとすると、$foo=""と返すみたいです。

逆に、関数内で、globalを使うことにより、グローバル変数を呼び出すことが可能みたいです。
例えば、下のようなファンクションがあったとします。


$foo = "test";
function hoge($args1){
global $foo;
$foo = "Hello".$args1."さん。";
return $foo;
}

上の場合、呼び出し元で、$fooを参照すると、「Hello引数さん。」と表示されるみたいです。

phpは、変数スコープをあまり考えないみたいなので、関数内部を作るとき、引数設定には、特に注意したいところかなと。

2008/10/10

[php]配列評価に、構造体を使う

今、Smartyを使っています。

その中で、ちょっと不思議だなーと思ったところがあるのでメモ。

仮に、以下の、ようなphpファイルがあるとします。

・・・(処理)・・・
$hoge = array("brother" => "弟" , "sister" => "姉");
・・・(処理)・・・
assign("foo",$hoge);
・・・(処理)・・・

で、変数fooををhtml側に埋め込むんだけど、その書き方が、

{$foo.brother}<br>
{$foo.sister}<br>

ってのはわかるんだけど、逆に、これだとバグになってしまうのがなんとも不思議

{$foo["brother"]}<br>
{$foo["sister"]}<br>

だって、上の表現って連想配列ってことでしょ。
ってことはアクセスの仕方には問題ないと思うんだけど。。。

調べてみると、確かに、2つ目はダメとのこと。

では連想配列の場合はどうか?
$array["key"] = 1;

という連想配列があった場合は

{$array["key"]}

と想像するかもしれませんが、答えは、

{$array.key}


via:Smarty徹底入門(3):assignした配列を読み込む

うーん、なんとも不思議。

[life hack]アプリ開発方法について

今日、初めて、Smartyというものを知りました。

これは何かというと、デザイン(html)とアルゴリズム系(php)を別にしてファイルを作成し、実行時に、一緒にドッキングできるという便利なツールなのですが、ここで重要だと思ったのは、一般的に、デザイナーさんが作るページ(主に.html)とプログラマが作るページ(.php)を別に切り分けて、開発するということ。

これには、びっくりしました。

だって、いつも開発するとき、デザイナーとかアルゴリズムがーとか考えず、全部、作っていたから。

うーん、会社によっては、デザインチームとアルゴリズムチームを別けているんですね。
というか、これが一般的なのかな??

[php]functionに関して~その2

前回、「[php]functionに関して」で、ファンクションの戻りが、違うような気がしたと書いたのですが、確かに間違っていたみたいです。

よかったぁー。

もし、自分が間違っていたとしたら、どうして、

function bold($test2){
  $test0 = "<b>$test2</b>";
  return $test2;
}

上のファンクションをコールしたときに、結果が、太字になるのか永久に考えてしまうところでした。

確かに、下でいいみたいです。

function bold($test2){
  $test0 = "<b>$test2</b>";
  return $test0;
}

ほっとしました。

[php]cookieを削除する

おととい、PHPセミナーがありました。

その際に、セッションの削除方法が教えていただいたのですが、同様にクッキーの削除についての説明がなかったので、聞いてみると、やはりこの方法いけることが判明。

まずは、セッションの削除は、この方法で、

$_SESSION = array();

なので、クッキーは、

$_COOKIE = array();

でいけます。

2008/10/09

[php]functionに関して

今度の金曜日にセミナーがあって、先生からテキストを頂いて、予習していたのですが、その中で、以下のようなソースがありました。

ここでは著作権の関係があるので、ファイル名、変数名を変更し、さらに値も変更して記載したいと思います。

/* hoge.phpの中身 */
include_once("foo.php");
$test0 = "maito";
$test1 = bold($test0);
print (test1);

/* foo.phpの中身 */
function bold($test2){
  $test0 = "<b>$test2</b>";
  return $test2;
}

via:phpセミナー資料

ってな具合に2つのファイルがあったとします。

片方は、hoge.phpで、include_onceというビルトイン関数はわかりませんが、おそらく名前と引数から、ファイルの内容をインクルードしてくれるのだと予想がつきます。

次に、ここで疑問が発生したのが、foo.phpの中身。
$test0変数に、引数にbタグを追加したものをセットし、引数をリターンしているんだよね。

別にこれ自体バグは起こさないんだけど、資料に、「太文字」になって返されると書かれていたから、納得がいかなくなり、先生に掲示板で聞いてみたら、$test2のままでオッケーだと教えていただいたんだけど、それでも、納得がいかなかったから、実際に実行をかけたら、案の定、太い文字で表示されなかったんだよね。

これって、もし、太文字で表現したい場合、

function bold($test2){
$test0 = "<b>$test2</b>";
return $test0;
}

だと思うのですが、資料の写し間違えかなー。。。(。>0<。)

[設計書]GUIの場合:設計書内に画面を載せる。

今、基本設計書の書き方を教えていただいているのですが、その中で、重要なことを追加。

GUIの場合:設計書内に画面を載せる。

仕事では、画面と文章を独立させて書いていました。
教えていただいた方、いわく、webアプリ全盛期なので、画面ありきとのこと。

あまりにも、画面と設計部分が独立している文章しかみていなかったので、同じファイルに書くという発想がでてこなかった。

何の疑問も持たずに仕事をしてしまうと、考えが凝り固まってしまい、こういった発想がでてこなくなるので、ちょっと危険なことなのかなと。
そういった意味で、意見を聞くことができてよかったと思う。

まぁー「画面と設計書を印刷してしまえば、同じじゃーない??」
と思うかもしれませんが、そう言い切ってしまうと結局、設計書の書き方に対するアプローチが一個しかなくて、他のアプローチがない状態になってしまう。

そうではなくて、プログラムと同様に設計書の書き方にもいくつかのパターンがあったらいいなと。

2008/10/08

goo辞書ガジェット、150000人突破

キセキです。

Photobucket

自作ガジェットでよくここまでこれたかなと。

でも、これで満足してはいけない!!

もっと向上しないと。

これからもがんばります♪

いつも使ってくださるユーザーさんありがとうございます。

これからも応援よろしくお願いいたします。

[java]Eclipseのインストール

前回、T.Sato君に、Eclipseを使うと開発速度が劇的に改善されるということを聞いたので、Java案件がきたことだし、さっそくダウンロードしてみました。

1:まずはダウンロード
2008年10月現在、最新版は、3.4.1がリリースされているんだけど、最新版だとdangerということで、3.4をダウンロードしました。

2:インストール
ダウンロードしたzipファイルを解凍し、「eclipse.exe」を実行します。

3:workspaceの作成
任意のフォルダにworkspaceを作成するみたいなんだけど、とりあえず、「C:\eclipse\workspace」に設定。

毎回、毎回、聞かれるのがうざいので、下のチェックボックス(Use this as the default and do not ask againと書かれている。)にチェックを入れる。

で、インストール完了!!

2008/10/06

[思い出]びっくりドンキーのハンバーグ

がおいしい。

おそらくファミレスの中で、群を抜いておいしいと思う!!

もちろん値段もリーズナブル♪

2008/10/05

[php]文字列と変数の結合は「.」で

文字列と変数の結合は「.」を使って実現できるみたいです。

$hoge = "maito";
print "私は、".$hoge."です";