0: - no date - ソース 現: 2026-08-13 (木) 08:56:06 なーお ソース
Line 1: Line 1:
 +**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」をハックします。 この方法は、[[nao-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>
 +
 +}}
 +
 +以上

  • inc/X2edituser のバックアップ差分(No. All)

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 48, today: 1, yesterday: 2