Sponsored Link

あざわの備忘録でタグ「OpenPNE」が付けられているもの

OpenPNEを携帯で見るとURLはリンクされないままURLが表示されてしまいます。これはPC用サイトの場合携帯では見れないことが多いから仕方なくリンクできないようにしているのではないでしょうか。

そこでGoogleのモバイル用最適化(コンバータ?)を使って携帯からも見れるようにしてみました。
/webapp/lib/smarty_plugins/modifier.t_url2a_ktai.php の30行目あたりの

    if (!$openpne_url) {
        return $raw_url;
    }
        if (!$openpne_url) {
        return sprintf('<a href="%sjump.php?u=%s">%s</a>', OPENPNE_URL, urlencode($raw_url), $raw_url);
    }
に入れ替えてください。

次にジャンプ用ページを作成します。(リファラ等セキュリティ強化のため)
public_html の直下(つまりindex.phpと同じディレクトリです)にこのファイル(jump.php)を解凍して置いてください。

一応jump.phpのソースです。これをコピペしても結構です。(必ずSJISで保存すること)


これで設定完了です。


これは結構使える機能だと思います。
もし使ったかたはご一報いただけると嬉しいです。

私はオープンソースを眺めるのが好きです。なんといっても実力者のソースを見ることで自分のスキルもアップすることができるからです。

例えばOpenPNE非常に巨大なシステムですが、よく整頓されておりソースを理解することで自然とPHPのスキルを高めることができます。

ではPHPで学べるスキルをあげてみます。


・クラスの基礎知識(オーバーライドなど)
・デザインパターン(特にシングルトン、テンプレート、ファクトリー、アダプターなど)
・フレームワークの効果(便利さ)
・セキュリティ対策
・Pear


など挙げるときりがありません。

例えばPerlだったらMovableTypeを眺めてみるとかもいいでしょうね。

OpenPNEのセッション情報はデフォルトでは公開フォルダ内のみで有効です(当然ですね)

でも上位のディレクトリとかでもこのセッション情報を利用したいことってありますよね。例えばヤフーのトップページみたいに通常サイトの右側にログイン情報(○通のメッセージがあります~とかね)の枠とかを作るとか。

こういうときは以下を変更すれば可能です。


/webapp/init.inc の105行目あたり

ini_set('session.cookie_path', $url['path']);

  を
ini_set('session.cookie_path', "/"');

に変更。

次に/webapp/init.inc の

//144行目あたりの
setcookie(session_name(), session_id(), $expire, $this->cookie_path);

//182行目あたりの
setcookie(session_name(), session_id(), $expire, $this->cookie_path);

  を

//144行目あたり
setcookie(session_name(), session_id(), $expire, "/");

//182行目あたり
setcookie(session_name(), session_id(), $expire, "/");

に変更すればサイト全体でセッション情報を活用できるようになります。

しかし!!

この場合はクッキーの有効範囲がサイト全体で有効になるため、そのサイト内で別にクッキーを使っている場合は競合する恐れがあります。もしも同じサイト内でOpenPNEを2つ以上構築している場合でもセッション情報が失われてログイン画面に戻ってしまいます。

セッションとクッキーの知識を装備して、うまく使い分けてください。

私の使っているsoftbank携帯(912SH)では製造番号通知がデフォルトではオフのため、かんたんログインができませんでした。意外とこの問題を抱えている人は多いのではないでしょうか?

softbank3G携帯ではUIDが取得できるため、こちらを取得すればログインができるはずです。

試しに実装してみました/webapp/lib/OpenPne/KetaiID.phpの77行目

        // SoftBank
        elseif (!strncmp($ua, 'SoftBank', 8)) {
            $pieces = explode('/', $ua);
            $piece_sn = explode(' ', $pieces[4]);
            $sn = array_shift($piece_sn);
            if (!strncmp($sn, 'SN', 2)) {
                $id = $sn;
            }
        }
        // SoftBank
       elseif (!strncmp($ua, 'SoftBank', 8)) {
            $pieces = explode('/', $ua);
            $piece_sn = explode(' ', $pieces[4]);
            $sn = array_shift($piece_sn);
            if (!strncmp($sn, 'SN', 2)) {
                $id = $sn;
            }elseif (isset($_SERVER["x-jphone-uid"])){
                $id = $_SERVER["x-jphone-uid"];
            }elseif (isset($_SERVER['HTTP_X_JPHONE_UID'])){
                $id = $_SERVER['HTTP_X_JPHONE_UID'];
            }
        }


これで私の携帯でもログインできるようになりました。 UIDであれば機種変更しても変わらないため今後はこちらをメインで取得したほうがよいかもしれません。(mixiやモバゲーもUIDを取得しているはずです)今回は先にUIDを取得してしまうと現ユーザーが再設定しない限りログインできないためこうなってしまいました。バージョンは2.12までは動作確認済みです。

 
後述:
実はこのプログラムは2.12で本家のOpenPNEに
組み込んでいただくことになりました。
そのためそれ以降のバージョンには対応済みです。
自分のソースが組み込まれるのはちょっとうれしかったりします。
まあ・・たいしたソースでもないんですけどね・・・

        

最近のブログ記事

PHPでリンク先が存在するかどうかを調べる方法
PHPでリンク先が存在するかどうかを調べ…
PHPで現在実行中のプログラムのディレクトリを調べる方法
<?php $path = dir…
フォーカスの点線を消す方法
AJAXで動的なタブ(Yahooのトップ…