ラベル smarty の投稿を表示しています。 すべての投稿を表示
ラベル smarty の投稿を表示しています。 すべての投稿を表示

2011年2月17日木曜日

cakephpでsmarty URLの引数を渡す、受け取る [未解決→中途半端に解決]

cakephp1.2.9

cakephpでURLの含まれる引数を渡す、受け取る方法。
cakephpでは、

http://hogehoge.com/hanage.php

というようなURLは

http://hogehoge.com/hanage

としてアクセスするらしい。
じゃあ、引数を持ったURLの場合どうするのか。

http://hogehoge.com/hanage.php?nagasa=100

とか

http://hogehoge.com/hanage.php?nagasa=100&color=bk

とかはどうすんだ?

インターネッツの情報では、


http://hogehoge.com/hanage/100

こんな風にしてアクセスして、Controller内で受け取れ、とか

http://hogehoge.com/hanage/nagasa:100/color:bk

とすればOKとか書いてあるんだけど、俺の環境では値を受け取る前にエラーページが表示されてしまう。
ついでに「:」でつなぐ方法は、URLには「:」を含めてはイカンというルールがあるらしく、携帯からのアクセスで問題を起こすらしい。
そこまでたどり着いていない俺には遠い話ですけども。

追記:
あまり綺麗ではないけども、一応解決。中途半端に。

  http://hogehoge.com/hanage/?nagasa=100

  function index(){
      $this->set('nagasa', $this->params['url']['nagasa']);
      $nagasa = $this->params['url']['nagasa'];
  }

こんな感じでアクセスできる。
ちなみにindex.phpじゃない場合はURLが若干違う。
たとえばmigiana.phpだった場合はこんな感じ。


http://hogehoge.com/hanage/migiana/?nagasa=100

もうちょっと綺麗にできるようになりたいと思う今日この頃。

cakephpでsmarty 別のテンプレートをインクルードする

smartyでは、別のテンプレートをインクルードして呼び出すことができる。
こんな感じ。


{include file='menu.tpl'}

値を渡すこともできる。

{include file='head.tpl' title=$title}

cakephpではこのように別のテンプレートを呼ぶ場合、viewsのelements内にファイルを置き、

$this->element('breadcrumb')

のように記述する。
この場合、breadcrum.btpというテンプレートファイルが、views/elementsディレクトリ内にあること。

記述例)
<?php echo $this->element('breadcrumb'); ?>

cakephpでsmarty smartyに値を渡す

ネイティブのphpではsmarty値を渡す時には以下のように書く。

$smarty->assign('name', $name);


cakephpではcontroller内に次の様に書くことでテンプレートで利用できる。


 $this->set('name',$name);

テンプレートではいずれも

 {$name}

で値を表示できる。