第一次写文章,希望与人提供方便同时,别误人子弟,自己研究的,大家看不懂只改文件就可以了,如果发现不对的地方请回复或直接通知我,谢谢,本来想在discuz论坛上发的,不懂版规也没时间看版规,怕发错,隔小jj怎么办?
(一)个人资料项排序问题解决方法
首先说明一下情况,昨天在做网站的个人资料项时发现后台可以设置排序的(图一)数字越大越往下,但是用户页面(图2)却是一直不变,比如新添加的字段想让他排在第一,在网上找了好久都没有搜索到(或许是我不会搜索)看了大半天,看懂了点,
(图2)
(图2 修改后的效果)
个人资料排序修改原理:每个标签下的资料项(如图中宝宝资料)都是以数组后在序列号的方式储存到数据库中的,这样自然就不能再排序了(排序也是在数组中处理按字母什么的排序,这样也不方便),查看文件include/spacecp/spacecp_profile.php文件,我们观察到,它先获取每个大项下属的每个小项以数组的形式,然后根据小项获取每个小项的html代码(就是后面的文本框、下拉框了),我们在获取小项后在对对数组中的每个小项根据原理后台设置的排序进行再次排序,在让它获取html代码就搞定了。
步骤:打开spacecp_profile.php文件
在大概423行下面 紧贴(搜索下面代码也可)
$htmls = $settings = array();
上面添加如下代码:
//二次开发 <<< 个人资料修改页面各选项排序问题解决
$noorder = array('idcardtype','idcard','zipcode','sightml','customstatus','timeoffset');
$jiaoji = array_intersect($noorder,$allowitems); //计算两个数组的交集,不计算的话个人签名和时区不显示
if(empty($jiaoji)){ $query = DB::query('SELECT fieldid FROM '.DB::table('common_member_profile_setting')." WHERE fieldid IN (".dimplode($allowitems).") ORDER BY displayorder ASC");
$allowitems=array(); //清空原来的小项的数组,以便对新数组排序
while($value = DB::fetch($query)) { $allowitems[$value['fieldid']] = $value['fieldid']; } }
//二次开发 >>>*/
计算交集问题$jiaoji 是因为不过不计算的话,个人签名和地区好像不显示,交集里的其他元素我也不知道是上面懂得,反正我的效果实现了,你们看哪里有需要的地方再修改吧。
(二 )添加N多自定义字段
原来discu x2 自带的自定义只有8个,比如我今天不高兴,心里又比较变态,想在加几十个怎么办,在数据表里
- pre_common_member_profile
- pre_common_member_profile_setting
- 在这两个表里添加field9到fieldn至于n到几看你当时心情又多变态了,就可以了,对了必须看下面的(三)
(三)修改栏目名称和栏目介绍
discux 系统自带的栏目和栏目介绍是不可以修改的,我们新添添加的fieldN也是不可以修改的,要修改的话可以在数据库中一个个改,这样比较麻烦,修改方法:
打开source/admincp/admincp_members.php
搜索:
$field['customable'] = preg_match('/^field[1-8]$/i', $fieldid);
只修改我们新添加的field自定义字段可以修改栏目名称和描述的方法(把[1-8]改为d+)
$field['customable'] = preg_match('/^fieldd+$/i', $fieldid);
修改系统所有字段;
$field['customable'] = preg_match('/.*/i', $fieldid);
这样就可以很方便的修改栏目名称和介绍了 O(∩_∩)O~
(系统原代的学历栏目可以修改了)