用户中心隐藏自定义字段的方法

作者:凤凰涅磐 来源:动易论坛 点击数: 发布时间:2007年02月25日

  有一小阵没回论坛了,一直忙于自己的事情。这次带来的是我们在给客户建站的时候遇到的一个问题和解决方法。为此,我特意与客户商议了一下(毕竟属于定制,保护客户隐私是我们的责任),客户很大度:模板不能共享,但技术可以共享。首先感谢这个哥们!而且这个案例我在我的blog里也写过,很多朋友也来问我,毕竟都是使用动易的,发在论坛里大家一起研究吧(其实我现在都不知道这个哥们是论坛的哪一个,汗一下,但我们现在已经是好朋友了哦),如果有更好的方法不要忘记通知我~动易论坛藏龙卧虎,高手不要笑啊~
     网站案例:此网站有一个用户反馈系统(系外部程序,jsp还是php程序来着,我忘了),当时,这个网站的客户反馈需要先提交到这个外部系统中,然后由管理员再复制过来,填写处理意见。麻烦死了~
    当时客户找到我的时候,并未提出要将这个位置集合到动易系统中来。但我个人在使用动易系统这么多年来,一直比较排斥外部程序、插件和整合(仅代表个人看法),虽然程序、插件的集合和整合给网站带来一定的方便性,但同时也带来了不安全的因素。所以,在我们制做模板过程中,能把用户的需求做进一个系统,而不改动数据库结构、页面源文件代码,这是我们一直追求的,毕竟修改了数据库的结构和源文件代码会给以后的系统升级带来很大的麻烦,而维护的自动化是所有站长和用户所需要的。于是,我与用户商议,我认为比较完美的解决方案是把反馈做进动易系统中来,但提前说明,可能不能实现,如果不能实现,我们仍旧使用旧方案。客户很高兴,提议可以试试,毕竟这样可以解决很大的维护力量浪费问题(我是给自己找麻烦,多一事不如少一事)。
    于是,使用文章频道扩展出一个反馈频道,进行自定义字段的添加,但添加后问题就出现了。因为管理员的处理意见和回复是不需要在用户中心反馈的时候出现,如果使用动易默认的用户中心结构,必然要暴露这些只需要管理员可视的字段。并且由于DLL缘故,新添加的字段字节为80个,假如我有一个字段叫做{$MT_TEL},只是填写电话,那么一定用不到这么长的字节,而且版式也很难看(特丑,但也是DII所决定的因素,别要求太多了,完美是没有止境滴~)。
    反编译我是不会的,做了这么多年的动易系统,我属于很笨很笨很笨的那种,程序也学不好,所以只有另辟捷径。首先,将这个用户反馈的用户中心页面另存下来,然后修改部分文件和图片的路径(就是一些js什么的),然后将这个页面另存为一个asp页面,比如111.asp,修改其中的字段位置和排版(主要都是表单格式),那么这个页面就好看多了。为了更加精简和人性化,有几个位置其实算重要吧。比如:关键字(这个位置论坛好像有人可以改,而且是在系统中,但我笨啊,没找到,所以我使用了另一个方法,而且这个方法,在我们后期通过dll很重要的)、栏目结构。将作者改为反馈者(名称的变换而已,但这个前台需要),这个时候所有的表单框就都可以修改了,因为里面的所有可以提交的字段都与数据库是相对的,所以只要正确填写,所有字段都可以正常入库。
    上面说了,需要隐藏关键字和部分不需要反馈者看到的字段,其实这里的方法很简单,使用div属性即可,代码如下:


    这里的反馈就是前台的一个栏目,使用文章扩展的,div长、宽都为0,属性:hidden(隐藏)。呵呵,是不是很简单啊!其实这里不是主要的问题,问题在提交的时候。按照另存下来的按钮提交后,会自动返回动易用户中心的界面,而且如果用户点击修改或其他的按钮,所有的字段将会再一次暴露,这里其实才是需要解决的问题。
    于是,做了另一个提交成功的页面,随便起名吧,叫ok.asp好了,页面里面也很简单,只写了几句话:您的反馈已经提交,谢谢~~~之类的就可以了,但问题是如何到达这个页面,并且入库?
    我们知道,表单的提交主要位置就在onClick动作上,如果修改默认按钮提交的onClick动作到ok.asp页面,那么所有的提交将不会入库。那么,设计思路就是让onClick提前执行,并且要通过DLL封装,进行入库动作,因为使用的是文章频道,必然要经过"PE_Article6", "User_Article",这个组件。而这个位置在user文件夹里的User_Article.asp文件上,也就是说,我们的入库一定要经过这里。
    前面说了,那个隐藏的方法很重要哦,我们要利用的就是这个div属性和User_Article.asp文件,因为只有通过这个文件,才可以顺利入库。
    那么,下面的问题就是如何让onClick动作执行在提交到User_Article.asp问题了。熟悉表单操作的朋友都知道,使用onClick动作跳转需要有一javaScript配合,那么,下面的问题就是如何让这个跳转提前执行,而不进入User_Article.asp。

  首先,在做好的OK.asp文件头上加一句,代码如下:
   这段代码,就是onClick提交的时候跳转到OK.asp页面。
    剩下的就是需要让这个onClick提前执行这个页面的时候了,默认的提交是提交到'SaveAdd'这里的,注意:上面的JavaScript定义了一个ID,就是modify()  ,那么在按钮提交的时候把这个写在'SaveAdd'前面吧代码如下:
onClick="modify();document.myform.Action.value='SaveAdd';document.myform.target='_self';"
这个时候就优先执行了我们需要到达的页面了,呵呵~~~别忘了,删了那些什么修改的按钮,如果用户点击这些,还是会跳回去的。

    下面就是提交页面了。上面说到了,一定要使用User_Article.asp这个文件的组件,否则不会通过也不会入库,那么OK.asp的页面就一定到"PE_Article6", "User_Article"这个组件的,那么还是老办法,div隐藏属性,代码如下:
 
   

您的反馈已经受理,请耐心等待!


   

点击返回首页


 

<% Call PE_Execute("PE_Article6", "User_Article") %>

    看到了吧,组件被隐藏起来了,表面上只有提交成功的字样,并无任何的修改等系统默认的按钮。

    这个就是在用户中心客户修改自定义字段隐藏提交的一个案例。当然,我的用户很高兴。这里继续汗一下:我们制做模板一向都是追求的完美,突然间感觉如果用户在后台提交太麻烦了,如果进入前台多好啊,于是与用户商议,当然用户是很高兴了。最后实现的是,用户利用我们提供的通用ID,在前台进行提交,其实也蛮简单的,通用ID在admin中修改,我忘了哪个文件了,自己找一下吧。然后把后台的文件iframr或#include file都可以,注意修改路径哦。前台反馈同时也隐藏了用户ID,用一个表单预添就可以了,然后隐藏。如果需要验证码,那是需要外部做一下了,毕竟防止恶意反馈嘛,删起来也累死人,如果不需要,做一个登陆就好了。

    描述修改的过程真的很简单,但当天做起来真的很难,试验这个方法,我试验了好像一个通宵。

    这个方法的缺点:
如果用户不填写必填的字段,是不能入库的,因为我们设定的onClick动作优先执行于系统默认的,所以不会出现某些提示,这是最大的弱点,如果哪位哥们研究出来,不要忘记告诉我哦~

ps:div的隐藏属性还可以隐藏一个位置,这个位置很多人在想,而且很有争议,不说也罢~

    很多坛友都知道我是做模板的,其实我要说的是,模板初级做的是美工,然后才是理解用户的想法和思想,这才是最重要的,以PE为核心网站发展到今天,而不仅仅是界面的美化,而更注重是功能,美化+功能才是一个界面工作者需要具有的技术和要求。

    偷偷说一下哦,这个站的用户先找了一个他认为比较有名的模板制做者制做,制做造价比我低呢,正因为想顾客而所想,知客户而所知,把顾客的难处想成自己难处,才能做好。正因为集合了这个功能,这个网站造价比原来的造价多了许多,其实受益都是双方的,看你怎么想吧。如果糊弄一下,也能赚到这个钱,如果认真些呢?

    每次的接单、每次的做站,我们都要尽这个时期的水平做到最好,发挥系统的及至功能。另外说的是:每一次的项目和案例,都让我从用户学到不少的知识,这是经验的积累,不是任何东西可以换来的。