2: 2008-08-17 (日) 17:56:29 なーお |
現: - no date - |
- | **AU携帯からX2サイトでプロフィール編集できない件のハック [#s2b5cde0] | |
- | #nocontents | |
| | | |
- | 携帯対応レンダーで、どうしてもプロフィール編集ができない件、Xoops 2.0.16a-JPでは 「edituser.php」がテンプレートレスのため、xoops2のコアハックが必要です。 今回、修正できましたので公開します。 | |
- | | |
- | 追記: 案1、案2がありますが、 案2がお勧めです。&br;&br; | |
- | | |
- | ***状況 [#d1d9014a] | |
- | | |
- | 「edituser.php」のフォーム出力は、表組みの中に組み込まれています。 しかし、この中に3つの<input hidden..>要素があり、<tr><td></td></tr>で囲まれていません。 | |
- | | |
- | PC表示の時のHTMLソース | |
- | #code(html,nonumber){{ | |
- | <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」のハック [#x2cee16f] | |
- | | |
- | ****edituser.phpのハック [#w69affb7] | |
- | edituser.phpの205行目あたり | |
- | | |
- | #code(php,205-){{ | |
- | $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'); | |
- | | |
- | }} | |
- | | |
- | これを、↓ 以下のように変更 | |
- | | |
- | #code(php,205-){{ | |
- | $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ソース [#ka47efca] | |
- | | |
- | 上記変更後に、PCからアクセスした時のHTMLソースは、以下のようになりました。 これで、AU携帯でも変更が可能になります。 | |
- | | |
- | #code(html,nonumber){{ | |
- | <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」のハック [#pbfc6139] | |
- | 上記&font(Red){「edituser.php」は元に戻し};て、「class/xoopsform/themform.php」をハックします。 この方法は、[[nso-ponさんに教えていただきました:http://xoops.hypweb.net/modules/forum/index.php?post_id=8790]]。 HTML構造的にも、こちらの方が正しいやりかただと思います。 | |
- | | |
- | **** themeform.php の 82行目あたりから [#ec255cf5] | |
- | #code(php,82-){{ | |
- | 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ソース [#lb1de06b] | |
- | #code(html,nonumber){{ | |
- | <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> | |
- | | |
- | }} | |
- | | |
- | 以上 | |