CakePHP(1.2.1.8004)で携帯サイト用のページングメモ。

PaginatorHelperが出力するリンクには、session.use_trans_sidがオンでも、セッションIDが付加されませんでした。

PaginatorHelperクラスを継承して、セッションIDを付加するヘルパーを作成することにします。

MyPaginatorHelperを作成し、docomo端末用にURLにセッションIDを付加する処理を加えます。

app/views/helpers/my_paginator.php
PHP:
  1. <?php
  2. App::import('Helper','Paginator');
  3.  
  4. class  MyPaginatorHelper extends PaginatorHelper
  5. {
  6.   function link($title, $url = array(), $options = array()) {
  7.     $link = parent::link($title, $url, $options);
  8.  
  9.     if (ini_get('session.use_trans_sid')) {
  10.       $pattern = '/href\s*=\s*"(.*)"/';
  11.       $replacement = 'my_replace_link';
  12.       $link = preg_replace_callback($pattern,$replacement,$link);
  13.     }
  14.     return $link;
  15.   }
  16. }
  17.  
  18. function my_replace_link($matches)
  19. {
  20.   if (!isset($matches[1])) {
  21.     if (isset($matches[0])) {
  22.       return $matches[0];
  23.     }
  24.     return '';
  25.   }
  26.   $href = $matches[1];
  27.   if (strpos($href,'?') === false) {
  28.     return 'href="' . $href . '/?' . session_name() . '=' . htmlspecialchars(session_id(),ENT_QUOTES) . '"';
  29.   }
  30.   else {
  31.     return 'href="' . $href . '&amp;' . session_name() . '=' . htmlspecialchars(session_id(),ENT_QUOTES) . '"';
  32.   }
  33. }

MyPaginatorHelperを使って、セッションIDが付加されたことを確認したのは、次のメソッドです。

  • sort()
  • prev()
  • next()
  • numbers()

関連投稿

Tags: , ,

コメントをどうぞ