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

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

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

Page Top

状況 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ではどうしても送信しても元ページに戻ってしまいます。

Page Top

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

Page Top
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');
Page Top
変更後にアクセス時の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>
Page Top

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

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

Page Top
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;
    }
Page Top
変更後にアクセス時の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>

以上


トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 1853, today: 1, yesterday: 2
初版日時: 2008-08-17 (日) 17:25:36
最終更新: 2008-08-17 (日) 17:56:29 (JST) (3595d) by naao