Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

注册时显示填写用户栏目的修改

[复制链接]
玻璃屋女孩 发表于 2008-9-1 09:55:54 | 显示全部楼层 |阅读模式
很多用户想实现在后台添加的用户栏目出现在注册的页面中。实现方法是给每一个用户栏目增加一个设置,“注册时填写”,选择“是”则会在注册时看到,对该栏目的是否必填的设置同时生效。
修改方案:(ted1006 提供)
1、执行SQL语句:
  1. ALTER TABLE `uch_profilefield` ADD `register` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `allowsearch` ;
复制代码
2、./admin/tpl/profilefield.htm 添加代码:84行左右,找到下面代码:
  1. <tr><th>简单介绍</th><td><input type="text" name="note" value="$thevalue[note]" size="40"></td></tr>
复制代码
在这段代码上面添加代码如下:
  1. <tr><th>注册时填写</th><td><input type="radio" name="register" value="0"<!--{if !$thevalue[register]}--> checked
  2. <!--{/if}-->> 否
  3.         <input type="radio" name="register" value="1"<!--{if $thevalue[register]}--> checked<!--{/if}-->> 是</td></tr>
复制代码
3、./admin/admincp_profilefield.php 修改代码:28行左右
  1. $setarr = array(
  2.         'title' => shtmlspecialchars(trim($_POST['title'])),
  3.         'note' => shtmlspecialchars(trim($_POST['note'])),
  4.         'formtype' => shtmlspecialchars(trim($_POST['formtype'])),
  5.         'maxsize' => intval($_POST['maxsize']),
  6.         'required' => intval($_POST['required']),
  7.         'invisible' => intval($_POST['invisible']),
  8.         'allowsearch' => intval($_POST['allowsearch']),
  9.         'choice' => shtmlspecialchars(trim($_POST['choice'])),
  10.         'displayorder' => intval($_POST['displayorder'])
  11. );
复制代码
修改为:
  1. $setarr = array(
  2.         'title' => shtmlspecialchars(trim($_POST['title'])),
  3.         'note' => shtmlspecialchars(trim($_POST['note'])),
  4.         'formtype' => shtmlspecialchars(trim($_POST['formtype'])),
  5.         'maxsize' => intval($_POST['maxsize']),
  6.         'required' => intval($_POST['required']),
  7.         'invisible' => intval($_POST['invisible']),
  8.         'allowsearch' => intval($_POST['allowsearch']),
  9.         'register' =>  intval($_POST['register']),
  10.         'choice' => shtmlspecialchars(trim($_POST['choice'])),
  11.         'displayorder' => intval($_POST['displayorder'])
  12. );
复制代码
4、./source/function_cache.php 修改代码:67行左右
  1. $query = $_SGLOBAL['db']->query('SELECT fieldid, title, formtype, maxsize, required, invisible, allowsearch, choice FROM '.tname('profilefield')." ORDER BY displayorder");
复制代码
修改为:
  1. $query = $_SGLOBAL['db']->query('SELECT fieldid, title, formtype, maxsize, required, invisible, allowsearch, register, choice FROM '.tname('profilefield')." ORDER BY displayorder");
复制代码
5、./source/do_register.php 添加代码:73行左右,找到下面代码
  1. if(!$_POST['password'] || $_POST['password'] != addslashes($_POST['password'])) {
  2.         showmessage('profile_passwd_illegal');
  3. }
复制代码
在这段代码上面添加如下代码:
  1. //用户栏目
  2. if(!@include_once(S_ROOT.'./data/data_profilefield.php')) {
  3.         include_once(S_ROOT.'./source/function_cache.php');
  4.         profilefield_cache();
  5. }
  6. $profilefields = empty($_SGLOBAL['profilefield'])?array():$_SGLOBAL['profilefield'];

  7. foreach ($profilefields as $field => $value) {
  8.         if($value['register']) {
  9.                 if($value['formtype'] == 'select') $value['maxsize'] = 255;
  10.                 $profilefield_setarr['field_'.$field] = getstr($_POST['field_'.$field], $value['maxsize'], 1, 1);
  11.                 if($value['required'] && empty($profilefield_setarr['field_'.$field])) {
  12.                         showmessage('field_required', '', 1, array($value['title']));
  13.                 }
  14.         }
  15. }
复制代码
6、./source/do_register.php 添加代码:161行左右,找到下面代码
  1. //在线session
  2. insertsession($setarr);
复制代码
在他上面添加代码如下:
  1. //更新用户栏目
  2. updatetable('spacefield', $profilefield_setarr, array('uid'=>$newuid));
复制代码
7、./source/do_register.php 添加代码:找到下面代码
  1. include template('do_register');
复制代码
在他上面添加代码如下:
  1. //栏目表单
  2. $profilefields = array();
  3. $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('profilefield')." WHERE register = 1 ORDER BY displayorder");
  4. while ($value = $_SGLOBAL['db']->fetch_array($query)) {
  5.         $fieldid = $value['fieldid'];
  6.         $value['formhtml'] = '';

  7.         if($value['formtype'] == 'text') {
  8.                 //input框长度
  9.                 $value['note'] = empty($value['note'])?'':$value['note'];
  10.                 $value['formhtml'] = "<input type="text" name="field_$fieldid" value="".$space["field_$fieldid"]."" class="t_input">";
  11.         } else {
  12.                 $value['formhtml'] .= "<select name="field_$fieldid">";
  13.                 if(empty($value['required'])) {
  14.                         $value['formhtml'] .= "<option value="">---</option>";
  15.                 }
  16.                 $optionarr = explode("\n", $value['choice']);
  17.                 foreach ($optionarr as $ov) {
  18.                         $ov = trim($ov);
  19.                         if($ov) {
  20.                                 $selectstr = $space["field_$fieldid"]==$ov?' selected':'';
  21.                                 $value['formhtml'] .= "<option value="$ov"$selectstr>$ov</option>";
  22.                         }
  23.                 }
  24.                 $value['formhtml'] .= "</select>";
  25.         }
  26.        
  27.         $profilefields[$value['fieldid']] = $value;
  28. }
复制代码
8、./template/default/do_register.htm 添加代码:72行左右,找到下面代码

  1. <br>请准确填入您的邮箱,在忘记密码,或者您使用邮件通知功能时,会发送邮件到该邮箱。</td></tr>
复制代码
在他下面添加代码如下:
  1. <!--{loop $profilefields $value}-->
  2. <tr>
  3.         <th>$value[title]</th>
  4.         <td>
  5.                 $value[formhtml]
  6.                 <!--{if $value[note]}--><br>$value[note]<!--{/if}-->
  7.         </td>
  8. </tr>
  9. <!--{/loop}-->
复制代码

评分

3

查看全部评分

xiaobozi 发表于 2008-9-1 11:01:08 | 显示全部楼层
顶啊
回复

使用道具 举报

忧郁的乞丐 发表于 2008-9-10 17:03:18 | 显示全部楼层
AD黄金广告位。。
顶了
回复

使用道具 举报

pc77maikongjian 发表于 2008-9-11 17:18:41 | 显示全部楼层
不错的方法,谢谢了.
回复

使用道具 举报

lemonboy 发表于 2008-9-12 23:37:02 | 显示全部楼层
呵呵,"简单介绍"建议官方集合到原文件上去,!
回复

使用道具 举报

wcnit 发表于 2008-9-19 21:35:20 | 显示全部楼层
   没啥意义
回复

使用道具 举报

testi 发表于 2008-9-20 15:26:13 | 显示全部楼层
精品文章啊,,,,,,我顶
回复

使用道具 举报

pc77maikongjian 发表于 2008-9-22 00:12:26 | 显示全部楼层
学习再学习,楼主辛苦了.
回复

使用道具 举报

成都站长 发表于 2008-9-26 11:09:43 | 显示全部楼层
慢慢的看..... 认真学习....
回复

使用道具 举报

otherthink 发表于 2008-10-6 19:15:08 | 显示全部楼层
确实不错。。。不过为什么官方不集成到系统中 反正有开关默认为否不是更好。。。不然每次升级都要修改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-23 23:07 , Processed in 0.036071 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表