PEAR::Pager にaccesskey属性を追加する。
携帯電話でウェブをみる時に便利なのは、電話のキー番号と画面のリンクを対応させることが出来るってこと。
例えば、はてなダイアリーだと「4」を押せば「前日の日記」にジャンプして、「0」を押せば「はてなダイアリーのトップページ」にジャンプできる。
PEAR::Pagerを使っているときにも、同じようにナビゲーション出切ると便利だなと思って探してみたら、はてなダイアリーで言及されていた。
Pagerにはマニュアルに載ってないオプションが結構ある。
PEAR::Pager - ぱんぴーまっしぐら typo-H
PEAR :: Manual :: Pager::factory
accesskeyとかおっと思うのですが、ページナンバーがそのままアクセスキーになる糞仕様。
10とかアクセスキーに設定しても意味ないじゃん。
nextAccesskey、firstAccesskeyとかいうオプション作ればいいのに。
使ってみるとナルホドくそ仕様だ。でもやっぱり携帯電話のアクセスキーは便利なので、仕方ないからPEAR::Pager::Common.phpを直接改変してみた。
オプションを3つ追加した。
- accesskeyNavi = boolean
- "true" にすると番号キーで前のページ、後のページの捜査が出来るようになります。
- accesskeyPrev = string (as numerical)
- 前のページに対応する番号キーを設定する。0〜9,*,#を設定できます。(ただし携帯電話端末によって異なる)
- accesskeyNext = string (as numerical)
- 後のページに対応する番号キーを設定する。0〜9,*,#を設定できます。(ただし携帯電話端末によって異なる)
PEARに取り込んでもらいたいとは思わないけど、プロポーザルってどうやるのかな?
diffファイルは次のとおり、これでパッチを当てればオケ。
*** /usr/local/lib/php/Pager/Common.php Thu Sep 4 13:30:36 2008 --- ./Common.php Thu Jan 8 17:12:43 2009 *************** *** 196,201 **** --- 196,225 ---- var $_accesskey = false; /** + * Add by k5959k@gmail.com + * + * @var boolean TRUE => show accesskey navigation on <a> tags + * @access private + */ + var $_accesskeyNavi = false; + + /** + * Add by k5959k@gmail.com + * + * @var string attribute accesskey navigation by phone key at previous page + * @access private + */ + var $_accesskeyPrev = '4'; + + /** + * Add by k5959k@gmail.com + * + * @var string attribute accesskey navigation by phone key at next page + * @access private + */ + var $_accesskeyNext = '6'; + + /** * @var string extra attributes for the <a> tag * @access private */ *************** *** 478,483 **** --- 502,510 ---- 'nextImgEmpty', 'expanded', 'accesskey', + 'accesskeyNavi', + 'accesskeyPrev', + 'accesskeyNext', 'attributes', 'onclick', 'separator', *************** *** 838,852 **** if (array_key_exists($this->_urlVar, $this->_linkData)) { $onclick = str_replace('%d', $this->_linkData[$this->_urlVar], $this->_onclick); } ! return sprintf('<a href="%s"%s%s%s%s title="%s">%s</a>', ! htmlentities($this->_url . $href, ENT_COMPAT, 'UTF-8'), ! empty($this->_classString) ? '' : ' '.$this->_classString, ! empty($this->_attributes) ? '' : ' '.$this->_attributes, ! empty($this->_accesskey) ? '' : ' accesskey="'.$this->_linkData[$this->_urlVar].'"', ! empty($onclick) ? '' : ' onclick="'.$onclick.'"', ! $altText, ! $linkText ! ); } elseif ($this->_httpMethod == 'POST') { $href = $this->_url; if (!empty($_GET)) { --- 865,895 ---- if (array_key_exists($this->_urlVar, $this->_linkData)) { $onclick = str_replace('%d', $this->_linkData[$this->_urlVar], $this->_onclick); } ! ! $stmt = '<a href="'; ! $stmt .= htmlentities($this->_url.$href, ! ENT_COMPAT,'UTF-8'); ! $stmt .= '"'; ! $stmt .= empty($this->_classString) ? '' : ' '.$this->_classString; ! $stmt .= empty($this->_attributes) ? '' : ' '.$this->_attributes; ! ! if ( $altText == $this->_altPrev ) { ! $stmt .= empty($this->_accesskeyNavi) ? ! '' : ' accesskey="'.$this->_accesskeyPrev.'"'; ! } ! elseif ( $altText == $this->_altNext ) { ! $stmt .= empty($this->_accesskeyNavi) ? ! '' : ' accesskey="'.$this->_accesskeyNext.'"'; ! } ! else { ! $stmt .= empty($this->_accesskey) ? ! '' : ' accesskey="'.$this->_linkData[$this->_urlVar].'"'; ! } ! $stmt .= empty($onclick) ? '' : ' onclick="'.$onclick.'"'; ! $stmt .= ' title="'.$altText.'">'.$linkText.'</a>'; ! ! return $stmt; ! } elseif ($this->_httpMethod == 'POST') { $href = $this->_url; if (!empty($_GET)) { *************** *** 1699,1702 **** // }}} } ! ?> \ No newline at end of file --- 1742,1745 ---- // }}} } ! ?>