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

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

user なーお datetime 2008/8/17 9:26 update 2008/8/17 10:27 views 7300

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
209
210
211
    $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
210
211
212
213
    $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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
    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

新しくコメントをつける

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