トップ  >  趣味の部屋  >  XOOPSサイト構築  >  AU携帯からX2サイトでプロフィール編集できない件のハック

AU携帯からX2サイトでプロフィール編集できない件のハック anchor.png

携帯対応レンダーで、どうしてもプロフィール編集ができない件、Xoops 2.0.16a-JPでは 「edituser.php」がテンプレートレスのため、xoops2のコアハックが必要です。 今回、修正できましたので公開します。

追記: 案1、案2がありますが、 案2がお勧めです。

状況 anchor.png

「edituser.php」のフォーム出力は、表組みの中に組み込まれています。 しかし、この中に3つの<input hidden..>要素があり、<tr><td></td></tr>で囲まれていません。

PC表示の時のHTMLソース

Everything is expanded.Everything is shortened.
 
 
 
 
 
 
 
 
 
 
 
 
<form name='userinfo' id='userinfo' action='edituser.php' method='post' onsubmit='return xoopsFormValidate_userinfo();'>
<table width='100%' class='outer' cellspacing='1'><tr><th colspan='2'>プロフィールの編集</th></tr>
 :(略)
<td class='even'><input type='radio' name='user_mailok' value='1' />はい
<input type='radio' name='user_mailok' value='0' checked='checked' />いいえ
</td></tr>
<input type='hidden' name='uid' id='uid' value='1' />
<input type='hidden' name='op' id='op' value='saveuser' />
<input type='hidden' name='XOOPS_TOKEN_edituser_0' id='XOOPS_TOKEN_edituser_0' value='73c49509e09fcefb3aee244ebbae50ee' />
<tr valign='top' align='left'><td class='head'></td>
<td class='even'><input type='submit' class='formButton' name='submit'  id='submit' value='変更を保存' />
</td></tr></table></form>

これが、PCのブラウザや、docomo、softbank携帯からは問題ないようなのですが、AUではどうしても送信しても元ページに戻ってしまいます。

案1「edituser.php」のハック anchor.png

edituser.phpのハック anchor.png

edituser.phpの205行目あたり

205
206
207
208
    $uid_hidden = new XoopsFormHidden('uid', $xoopsUser->getVar('uid'));
    $op_hidden = new XoopsFormHidden('op', 'saveuser');
    $token_hidden = new XoopsFormToken(XoopsSingleTokenHandler::quickCreate('edituser'));
    $submit_button = new XoopsFormButton('', 'submit', _US_SAVECHANGES, 'submit');

 これを、↓ 以下のように変更

205
206
207
208
209
    $uid_hidden = "<tr><td></td><td><input type='hidden' name='uid' id='uid' value='" . $xoopsUser->getVar('uid'). "' />";
    $op_hidden = "<input type='hidden' name='op' id='op' value='saveuser' />";
    $token = new XoopsFormToken(XoopsSingleTokenHandler::quickCreate('edituser'));
    $token_hidden = "<input type='hidden' name='".$token->_name."' id='".$token->_name."' value='".$token->_value."' /></td></tr>";
    $submit_button = new XoopsFormButton('', 'submit', _US_SAVECHANGES, 'submit');
変更後にアクセス時のHTMLソース anchor.png

上記変更後に、PCからアクセスした時のHTMLソースは、以下のようになりました。 これで、AU携帯でも変更が可能になります。

Everything is expanded.Everything is shortened.
 
 
 
 
 
 
 
 
 
 
 
 
<form name='userinfo' id='userinfo' action='edituser.php' method='post' onsubmit='return xoopsFormValidate_userinfo();'>
<table width='100%' class='outer' cellspacing='1'><tr><th colspan='2'>プロフィールの編集</th></tr>
 :(略)
<td class='even'><input type='radio' name='user_mailok' value='1' />はい
<input type='radio' name='user_mailok' value='0' checked='checked' />いいえ
</td></tr>
<tr><td></td><td><input type='hidden' name='uid' id='uid' value='1' />
<input type='hidden' name='op' id='op' value='saveuser' />
<input type='hidden' name='XOOPS_TOKEN_edituser_0' id='XOOPS_TOKEN_edituser_0' value='10d24c91a2f218e02dc53e02a27622f3' /></td></tr>
<tr valign='top' align='left'><td class='head'></td><td class='even'>
<input type='submit' class='formButton' name='submit'  id='submit' value='変更を保存' />
</td></tr></table></form>

案2「themform.php」のハック anchor.png

上記「edituser.php」は元に戻して、「class/xoopsform/themform.php」をハックします。 この方法は、nao-ponさんに教えていただきました。 HTML構造的にも、こちらの方が正しいやりかただと思います。

themeform.php の 82行目あたりから anchor.png
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
    function render()
    {
        $required =& $this->getRequired();
        $ret = "<form name='".$this->getName()."' id='".$this->getName()."' action='".$this->getAction()."' method='".$this->getMethod()."' onsubmit='return xoopsFormValidate_".$this->getName()."();'".$this->getExtra().">\n<table width='100%' class='outer' cellspacing='1'><tr><th colspan='2'>".$this->getTitle()."</th></tr>";
        //$count = 0;
        $hidden = '';
        foreach ( $this->getElements() as $ele ) {
            if (!is_object($ele)) {
                $ret .= $ele;
            } elseif (!$ele->isHidden()) {
                //if ($count % 2 == 0) {
                    $class = 'even';
                //} else {
                //    $class = 'odd';
                //}
                $ret .= "<tr valign='top' align='left'><td class='head'>".$ele->getCaption();
                if ($ele->getDescription() != '') {
                    $ret .= '<br /><br /><span style="font-weight: normal;">'.$ele->getDescription().'</span>';
                }
                $ret .= "</td><td class='$class'>".$ele->render()."</td></tr>";
                //$count++;
            } else {
                $hidden .= $ele->render();
            }
        }
        $ret .= "</table>" . $hidden . "</form>\n";
        $ret .= $this->renderValidationJS( true );
        return $ret;
    }
変更後にアクセス時のHTMLソース anchor.png
Everything is expanded.Everything is shortened.
 
 
 
 
 
 
 
 
 
 
 
 
<form name='userinfo' id='userinfo' action='edituser.php' method='post' onsubmit='return xoopsFormValidate_userinfo();'>
<table width='100%' class='outer' cellspacing='1'><tr><th colspan='2'>プロフィールの編集</th></tr>
 :(略)
<td class='even'><input type='radio' name='user_mailok' value='1' />はい
<input type='radio' name='user_mailok' value='0' checked='checked' />いいえ
</td></tr>
<tr valign='top' align='left'><td class='head'></td>
<td class='even'><input type='submit' class='formButton' name='submit'  id='submit' value='変更を保存' /></td></tr></table>
<input type='hidden' name='uid' id='uid' value='1' />
<input type='hidden' name='op' id='op' value='saveuser' />
<input type='hidden' name='XOOPS_TOKEN_edituser_0' id='XOOPS_TOKEN_edituser_0' value='d7a44c5ccee5b9e7c95775c94437bd2b' />
</form>

以上


実体ファイル:inc/X2edituser

プリンタ用画面
投票数:88 平均点:5.68
前
XC2.0のサイトで携帯対応(携帯対応レンダー)
カテゴリートップ
XOOPSサイト構築
次
picoタイトルのxpWikiへの外部Autoリンクに挑戦

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ