CakePHP その21 〜MobileHelper2 〜 [CakePHP]
まず、Prefixルーティングを使うとき、CakePHP1.2 RC2のHTMLヘルパーでは下記の現象が起きる。
まず、通常のリンクは下記のように書く。
そして、下記のようなHTMLが出力される。
しかし、これを下記のようにprefix付きで書くと…
これは困る。
もう一つ困ることと言えば、Paginator使うと、リンクURLにセッションIDが含まれなくなってしまう。
ので、それらを解決するために、結局MobileHelperを作成。
基本的には、Paginatorを継承させるけど、他の普通のリンクなど、携帯対応しなきゃ行けないのはついでに含ませてしまおう。
いまんとこ、こんな感じで問題無くやってます。
あと、前回にMobileAppControllerに書いたredirectはやっぱ不便なんで、mobRedirectと言う名前に変更しました。AuthComponentではねた時にURLにセッションIDがついてたら変だから。気づかなかったのはまぬけ。
まず、通常のリンクは下記のように書く。
$html->link('リンクテキスト', array('controller' => 'names', 'action' => 'index', 'a' => 'A'));
そして、下記のようなHTMLが出力される。
<a href="/names/index/a:A">リンクテキスト</a>
しかし、これを下記のようにprefix付きで書くと…
php
$html->link('リンクテキスト', array('controller' => 'names', 'action' => 'mobile_index', 'a' => 'A'));
- 期待されるHTML
<a href="/m/names/index/a:A">リンクテキスト</a></li>
- 実際に出力されるHTML
<a href="/names/mobile_index/a:A"> リンクテキスト</a></li>
これは困る。
もう一つ困ることと言えば、Paginator使うと、リンクURLにセッションIDが含まれなくなってしまう。
ので、それらを解決するために、結局MobileHelperを作成。
基本的には、Paginatorを継承させるけど、他の普通のリンクなど、携帯対応しなきゃ行けないのはついでに含ませてしまおう。
class MobileHelper extends PaginatorHelper {
//セッションIDをつけるPaginator用リンク
function link($title, $url = array(), $options = array()) {
$options = array_merge(array('model' => null, 'escape' => true), $options);
$model = $options['model'];
unset($options['model']);
if (!empty($this->options)) {
$options = array_merge($this->options, $options);
}
if (isset($options['url'])) {
$url = array_merge((array)$options['url'], (array)$url);
unset($options['url']);
}
$url = $this->url($url, true, $model);
$obj = isset($options['update']) ? 'Ajax' : 'Html';
$url = array_merge(array('page' => $this->current($model)), $url);
//ここから変更
if(Configure::read('mobile')){
$url['page'] .= '?'.session_name().'='.session_id();
}
return $this->{$obj}->link($title, Set::filter($url, true), $options);
}
//セッションIDをつける通常リンク
function htmlLink($title, $url = array(), $options = array()){
//ここから変更
if(Configure::read('mobile')){
$url = am($url, array('?'.session_name().'='.session_id()));
}
$obj = isset($options['update']) ? 'Ajax' : 'Html';
return $this->{$obj}->link($title, Set::filter($url, true), $options);
}
function image($path, $options = array()){
//ここから変更
if(Configure::read('mobile')){
$sid = '?'.session_name().'='.session_id();
}
$obj = isset($options['update']) ? 'Ajax' : 'Html';
return $this->{$obj}->image($path.$sid, $options);
}
}
いまんとこ、こんな感じで問題無くやってます。
あと、前回にMobileAppControllerに書いたredirectはやっぱ不便なんで、mobRedirectと言う名前に変更しました。AuthComponentではねた時にURLにセッションIDがついてたら変だから。気づかなかったのはまぬけ。
2008-09-20 19:31
nice!(0)
コメント(0)
トラックバック(0)
コメント 0