So-net無料ブログ作成
検索選択
Lancers.jp

CakePHP その21 〜MobileHelper2 〜 [CakePHP]

まず、Prefixルーティングを使うとき、CakePHP1.2 RC2のHTMLヘルパーでは下記の現象が起きる。

まず、通常のリンクは下記のように書く。

$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がついてたら変だから。気づかなかったのはまぬけ。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。