公司招全职员工(php 开发工程师/网页美工/网站编辑):

11月 8, 2006 on 8:57 pm | In 未分类 | 1 Comment

我们是一家面向某专业领域的基于WEB2.0模式的创新型行业门户网站,为广大用户提供全面纵深的专业信息及商务服务,以雄厚的资本实力和踏实的传统行业作风打造本领域的第一品牌。
现诚邀各方精英加盟,我们为员工提供极具竞争力的待遇、舒适的工作环境和良好的发展前景,有意者请发送中文简历至wj@bangtian.com.cn,。

网站开发工程师

* 招聘人数:[3]人
* 待遇:面议
1. 计算机或相关专业本科及以上学历,两年以上网站开发工作经验;
2. 熟悉网站开发环境,熟练掌握php开发语言以及mysql数据库;
3. 有良好的沟通交流能力和学习能力;熟悉互联网行业;
4. 具备良好的团队合作精神,能够承受工作压力;

网页设计师

* 招聘人数:[1]人
* 最低学历要求:大专
* 待遇:面议

1.有网页设计相关工作经验。
2.熟练掌握设计工具,熟悉网页设计开发流程;
3.具有良好的审美品位以及学习能力;
4.精通至少一款图形处理软件(Adobe Photoshop,Fireworks,Coreldraw等任一种),有相关个人作品。
5.能力突出者,学历要求可适当放宽。

网站编辑

* 招聘人数:[3]人
* 待遇:面议

1.农业或中文相关专业本科及以上学历。
2.熟悉HTML代码,熟练使用Word等办公编辑软件。
3.对新闻编辑工作有热情,有较好的写作能力;
4.善于与人沟通,有较强的表达能力;

I am so upset….

11月 7, 2006 on 8:53 pm | In 未分类 | 3 Comments

I am so upset….rightfully upset.
My brother call me for money the morning.He lend me 8000¥ for my university.
Now I must give him some.
But I am so poor. I have got only 1500.
Everybody consider me as rich.In theri opion,Money comes just like raining.
Otherwise,I will do my best to earn enough .

跟覃总聊了好久

11月 5, 2006 on 11:33 pm | In 未分类 | 3 Comments

覃总过来,我请他在小菜馆里吃饭。
下午四点了,他还没吃早饭。做了老板了就得忙了。我还有几年不会去想做老板。所以我还可以轻闲几年。
请他吃完,回来聊了一会儿框架,结论是我还是把我的东西放到sf.net上去,然后还是帮他做商用的。
晚上7:00,又带他去原地儿吃饭。没想到这次聊了更久,到10:00.
没想到,我跟他的经历如此相似。
都在华工的图书馆新馆二楼借过书,都对那个图书室的书的摆放是如数家珍。
都逃课去图书馆,都挂过科。
都是在老馆外面的石凳上看过”疯狂站长之PHP4″这本书。
都在就业中心的二楼的房间为学校那帮老师打过工。
太多相似了。
希望覃总的项目能成功。
华工的校友在IT行业混得有头有脸的不少,我相信他会成为一个。
但我现在不想任何创业的事情,我还要再过几年。

11月 5, 2006 on 11:27 pm | In 未分类 | No Comments

好大的风!
没到北方来过,没见过这么大的风。
北京的冬天,看来不好过。
互联网的冬天也要来了。
三年一个轮回。

极度缺钱中…

11月 3, 2006 on 10:38 pm | In 未分类 | 1 Comment

虽然公司发了我的第一个月的那点可怜的钱了,不过等我还出去后又穷了…
照这么算下去,我其实到年底也存不下一点钱。我还是会很穷。。。
我从老大zhuaizhuai那里学到了一点东西。就是什么东西哪怕可能无法实现,也要敢想。
所以,我现在缺钱,我也要想办法解决。
1.跟家里人沟通一下,该拿的钱推迟一下再拿出来。
2.跟老大商量一下,借个电脑用用。没有一台自己的notebook,很头疼。两台台式机的程序同步很麻烦,更加上公司网络也不行,ftp老中断。
3.写一份加薪申请。我本有机公拿80元的薪水,可是找了一份50元的工作,做的却是30元的事情。公司不缺钱,而我也不只值这么点钱,所以,就应当理直气壮地提出来,不是什么大不了的事。公司应该需要的是我做更多事情,帮公司获取更利润,而不是我少拿点儿薪水,帮公司省点儿钱。要省工资的话,可以去招一帮民工,一天50块钱就够了。如果公司实在认为给我这么多值,那我应该去更能发挥我价值的地方。
4. 搬家。找一个更近的地方。虽然房租会贵一些,但是每天省下两个小时报时间,也是一笔不小的财富。
5.周末去做兼职。(顺便广告,接手php小项目,或培训等。100元/小时或500元/天起。天指8小时,不加班)

给XOOPS加一个Hack,以增加某些AJAX应用支持…

11月 3, 2006 on 6:15 pm | In 未分类 | No Comments

注意:非PHP开发者, 没用过Xoops请不用浪费时间。
烦透了XOOPS的那个XoopsTpl,每次不论什么页面都会自动加上头和尾以及其他block。比如我用Iframe包含了另一个页,另一个页也出来一个头,那就有两个头了,巨难看。不用吧,有一些变量比如xoopsUser什么的都需要我一个一个去assign,很麻烦。
今天做了一个hack,就可以让指定页不包含头了.原理很简单,在smarty模板中加一个变量,当这个变量为no时,那些xoops自动产生的block才会显示出来。如果在url中加上?ajax=yes,系统就不显示这些xoops自动产生的区块,只显示由$xoopsOption["template_main"]模板产生的内容。
首先,把theme.html文件中
<{$xoops_contents}>标签前和标签后的内容都用
<{ if $xoops__notajax == "no" }>和<{/if}>包含起来。
完成后的theme.html应是这样的样式:
<{ if $xoops__notajax == "no" }>
这里是一些HTML代码
<{/if}>
<{$xoops_contents}>
<{ if $xoops__notajax == "no" }>
这里是一些HTML代码
<{/if}>
但是我们还需要在header文件中加一段:

  1. <?php
  2.         if($_GET["ajax"]=="yes")
  3.         {
  4.             $xoops__notajax="yes";
  5.         }
  6.         else
  7.             $xoops__notajax="no";
  8. $xoopsTpl->assign_by_ref( 'xoops__notajax',$xoops__notajax);
  9. ?>

我用了文明猪的一个hack,我的完成后是这样的:

  1. $xoopsTpl->assign_by_ref( 'xoBlocks', $aggreg->blocks );
  2.        
  3.         if($_GET["ajax"]=="yes")
  4.         {
  5.             $xoops__notajax="yes";
  6.         }
  7.         else
  8.             $xoops__notajax="no";
  9.        
  10.          $xoopsTpl->assign_by_ref( 'xoops__notajax',$xoops__notajax);      
  11.         // Backward compatibility code for pre 2.0.14 themes
  12.         $xoopsTpl->assign_by_ref( 'xoops_lblocks', $aggreg->blocks['canvas_left'] );
  13.         $xoopsTpl->assign_by_ref( 'xoops_rblocks', $aggreg->blocks['canvas_right'] );
  14.         $xoopsTpl->assign_by_ref( 'xoops_ccblocks', $aggreg->blocks['page_topcenter'] );
  15.         $xoopsTpl->assign_by_ref( 'xoops_clblocks', $aggreg->blocks['page_topleft'] );
  16.         $xoopsTpl->assign_by_ref( 'xoops_crblocks', $aggreg->blocks['page_topright'] );
  17.    
  18.         $xoopsTpl->assign( 'xoops_showlblock', !empty($aggreg->blocks['canvas_left']) );
  19.         $xoopsTpl->assign( 'xoops_showrblock', !empty($aggreg->blocks['canvas_right']) );

您看一看,我是把代码加在了header.php文件的有$xoopsTpl->assign语句的附近。

xoops:article模块加入所见即所得功能支持(用TinyMCE)

11月 3, 2006 on 5:58 pm | In 未分类 | No Comments

article模块加入所见即所得功能支持:
Xoops的内核加入了对Form表单各个种类的封装,这个设计是简化了一些程序设计工作,但是其众多的Form class往往让人头晕。
xoops自带的Koivi,Dhtml编辑器都不怎么出色,很难直接投入商业运用,因此许多人尝试进行Hack.
今天跟霍炬聊的时候,他的话给了我信心,仔细看了代码,发现其实还是不太难的。
下面和我一起做。
我用的Xoops为XOOPS 2.015,artcile模块为0.96.这里系统自带的有三个编辑器,Textarea,koivi,dhtml.在
xoops\Frameworks\xoops22\class\xoopseditor\ 中可以看到。
我在xoops\Frameworks\xoops22\class\xoopseditor\textarea\textarea.php中加入这样一个类:

  1. <?php
  2. class XoopsFormTextAreaJsWithTinyMCE extends XoopsFormTextArea{
  3.     var $js="/xoops/js/tiny_mce/tiny_mce.js";
  4.     var $script="<script language=\"javascript\" 
  5. type=\"text/javascript\">\n    tinyMCE.init({\n       
  6. mode : \"exact\",\n        theme : \"advanced\",\n   
  7.     elements : \"text,elm2\",\n        plugins :
  8. \"table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,
  9. preview,zoom,media,searchreplace,print,contextmenu,paste,
  10. directionality,fullscreen\",\n       
  11. theme_advanced_buttons1_add_before :
  12. \"save,newdocument,separator\",\n       
  13. theme_advanced_buttons1_add : \"fontselect,fontsizeselect\",\n        theme_advanced_buttons2_add : \"separator,insertdate,inserttime,preview,zoom,
  14. separator,forecolor,backcolor\",\n       
  15. theme_advanced_buttons2_add_before: \"cut,copy,paste,pastetext,pasteword,separator,
  16. search,replace,separator\",\n       
  17. theme_advanced_buttons3_add_before :
  18. \"tablecontrols,separator\",\n       
  19. theme_advanced_buttons3_add : \"emotions,iespell,media,advhr,separator,print,
  20. separator,ltr,rtl,separator,fullscreen\",\n   
  21.     theme_advanced_toolbar_location : \"top\",\n        theme_advanced_toolbar_align :
  22.  \"left\",\n        theme_advanced_statusbar_location : \"bottom\",\n   
  23.     content_css : \"example_word.css\",\n
  24.         plugi2n_insertdate_dateFormat : \"%Y-%m-%d\",\n        plugi2n_insertdate_timeFormat : \"%H:%M:%S\",\n
  25.         external_link_list_url : \"example_link_list.js\",\n       
  26. external_image_list_url : \"example_image_list.js\",\n
  27.         media_external_list_url : \"example_media_list.js\",\n        file_browser_callback : \"fileBrowserCallBack\",\n
  28.         paste_use_dialog : false,\n       
  29. theme_advanced_resizing : true,\n       
  30. theme_advanced_resize_horizontal : false,\n   
  31.     theme_advanced_link_targets : \"_something=My somthing;_something2=My somthing2;_something3=My somthing3;\",\n   
  32.     paste_auto_cleanup_on_paste : true,\n        paste_convert_headers_to_strong : false,\n        paste_strip_class_attributes : \"all\",\n   
  33.     paste_remove_spans : false,\n       
  34. paste_remove_styles : false        \n    });\n\n   
  35. function fileBrowserCallBack(field_name, url, type, win) {\n
  36.         // This is where you insert your custom filebrowser logic\n        alert(\"Filebrowser callback: field_name: \" + field_name + \",
  37. url: \" + url + \", type: \" + type);\n\n       
  38. // Insert new URL, this would normaly be done in a popup\n       
  39. win.document.forms[0].elements[field_name].value = \"someurl.htm\";\n
  40.     }\n</script>";
  41.     function render()
  42.     {
  43.         return "<script src='".$this->js."' >
  44. </script>".$this->script."<textarea name='".$this->getName()."'
  45. id='".$this->getName()."' rows='".$this->getRows()."' cols=
  46. '".$this->getCols()."'".$this->getExtra().">".$this->getValue()."
  47. </textarea>";
  48.     }
  49. }
  50. ?>

然后我们把class FormTextArea extends XoopsFormTextArea 改成
class FormTextArea extends XoopsFormTextAreaJsWithTinyMCE。哈哈,现在成功了。
不过这样也只有当编辑在发布文章选择textarea这个编辑器时才有用,选了koivi和DHTML时还是不行。这也容易,我们把
xoops\modules\article\include\form.article.php中的

  1. $form_art->addElement(new XoopsFormSelectEditor($form_art,"editor",$editor,$nohtml));

这一行去掉。这样用户就没得选择了。然后我们把默认编辑器设成textarea:
找到

  1. $form_art->addElement(new XoopsFormEditor(art_constant("MD_TEXT"), $editor, $editor_configs, $nohtml, $onfailure=null));

这一行,把$editor改为”textarea”,ok了,系统不管什么时候都会使用TinyMCE.
当然,您看到了,在Xoops/js目录下加上TinyMCE这个目录。这个您自个儿Google一下 然后去tinyMCE官方网站去下吧。

cake的安装

11月 2, 2006 on 11:04 pm | In 未分类 | No Comments

section 1
介绍:
前面您已经了解了Cakephp的结构和cakephp的库的作用了,或者您跳过了,直接来到了这一部分,因为您不关心那些,只想早点开始。不管怎么说,您现在要开始动手了。
这一章要介绍在服务器上您必须安装什么,配置您的服务器的不同方法,下载和安装Cakphp,开始Cakephp的第一个页面,以及某些东西并没有按照设想正确运行时的修正技巧。

section 2
需求:
要安装Cakephp,您必须要一台拥有Cakephp的需要的各种库、程序:
服务器需求:
这里就是一台服务器能正确运行Cakephp的要求:

  • 一个HTTP server(比如 Apache) ,要能支持以下功能:Session,Mod_rewrite(不是完全必备的,但是最好有).
  • PHP4.3.2或更高版本。当然,Cakephp不管是在PHP4上还是在PHP5上都能运行得很好。
  • 一个数据库引擎(现在,我们已经支持Mysql,PostgreSQL,并且兼容ADODB).

section 3
安装 Cakephp
a:得到最新的发行版
有几种方法可以得到CakePHP的一份安装的拷贝:从cakeforge上得到一个稳定版本,或一个nightly版本,或者从SVN找一个刚出锅的。
要下一个稳定版,可以到http://cakeoforge.net/projects/cakephp/来查找。
要找一个最新版本,可以从http://cakephp.org/downloads/idnex/nightly.这些一般是比较稳定的,并且包含有稳定版中修复了的Bug.
如果您要从我们的SVN库中找一个最新版的,请使用您的SVN客户端,连接到https://svn.cakephp.org/repo/trunk/cake/并选择下载您想要的版本。
解压:
现在您已经下到了最新的版本,那就把这个压缩包放到您的web服务器的根目录。现在把它解压它。现在可以两种装法,一种是DEVELOPMENT式的,可以在一个域下查看许多cake程序。另一个就是发布版的,一个域名下只能装一个cake程序。
安装:
注意:/app/tmp必须有写权限。(linux/unix下用chmod 777)
development安装:
要装一个development的环境,我们可以装cake安装成这样一种目录结构:

/wwwroot
    /cake
        /app
        /cake
        /vendors
        .htaccess
        index.php

在这种安装中,wwwroot目录是您的根目录,因此您的URL应该是这样的:
www.example.com/cake/controllerName/actionName/param1/param2
Production 式安装:
要建立一个production式的安装,您需要有改变您的web服务器的DocumentRoot的权限。这样,整个域就成了一个Cake应用程序。
production式安装成这样一种结构:

../path_to_cake_install
    /app
        /config
        /controllers
        /models
        /plugins
        /tmp
        /vendors
        /views
        /webroot <-- This should be your new DocumentRoot
        .htaccess
        index.php
    /cake
    /vendors
    .htaccess
    index.php

建议您的httpd.conf改一下:

  1. DocumentRoot /path_to_cake/app/webroot

在这种情况下webroot目录就是根目录了,这样您的地址看起来是这样的:
http://www.example.com/controllerName/actionName/param1/param2

高级安装:可选的安装选项
当您希望将Cake的那些目录放在磁盘上的不同的地方时,这里给出了一些案例。之所以有这个需要,是因为您可能是使用了一些受限的虚拟主机,或是您希望您的不同的应用能够共享一个cake库。
一个Cake程序有三个重要部分:

  • 核心的库文件–一般在/cake
  • 您的程序文件(比如controllers,models,layouts或views),一般在/app目录下。
  • 您的应用程序的根目录.(比如,图片,js文件,css文件)–一般在/app/webroot目录下。
    • 这其中任何一个都可以放在您文件系统中的任何地方,不过Webroot需要您的webserver做相应配置。您可以把webroot移出app目录,当然您需要告诉cake您把它移到哪儿了。
      要配置Cake,您可以更改/app/webroot/index.php文件。这里有三个常数您需要编辑一下:ROOT,APP_DIR,CAKE_CORE_INCLUDE_PATH.

      • ROOT:需要设置成包含有app目录的那个目录。
      • APP_DIR:需要设置成您的app目录
      • CAKE_CORE_INCLUDE_PATH 需要设置成您的cake的内核库文件的路径。
      1. app/webroot/index.php (partial, comments removed)
      2. if (!defined('ROOT'))
      3. {
      4.     define('ROOT', dirname(dirname(dirname(__FILE__))));
      5. }
      6.  
      7. if (!defined('APP_DIR'))
      8. {
      9.     define ('APP_DIR', basename(dirname(dirname(__FILE__))));
      10. }
      11.  
      12. if (!defined('CAKE_CORE_INCLUDE_PATH'))
      13. {
      14.     define('CAKE_CORE_INCLUDE_PATH', ROOT);
      15. }

      未完—待续…

CakePHP:基本知识..

11月 2, 2006 on 10:18 pm | In 未分类 | No Comments


基本概念



Section 1



Introduction



这一间是一个简短的,不太专业的MVC介绍。因为在cake中也实现了它。如果您是一位MVC的新手,这一章就是为您准备的。
我们讨论一下MVC的基本概念,然后渐渐转到我们在CakePHP中的MVC实现,并给出使用了MVC范式的cakephp的几个例子。


Section 2



The MVC Pattern



“模块–视–控制器”是一个软件设计模式,它会使您的逻辑同您的代码相分离,使产品更具复用性,易维护性,总体来说是更棒一些。”模块–视–控制器”设计模式最先被一个叫”author group Gang of Four”的组织提出来。Dean
Helman 这样写: (从Objective Toolkit Pro white paper摘录的一段):





MVC模式只是一种将一个程序甚至只是一个程序的一部分划分为三个层面:模块,视,控制器。


输入->处理 -> 输出


控制-> 模块 ->视


“用户输入,抽象和建模,以可视化的界面返回给用户,这些被分开了,并分别被模块,视,控制器处理。控制器解释用户的鼠标和键盘的输入,并将这些用户动作转化为发送给模块或视的命令,以便引起适当的动作。model管理一个或更多的数据元素,回应对这些元素的状态的问询,回应那些改变这些元素的状态的指令.View层面就管理显示器的一个矩形区域,确保能够以文字和图形的形式把数据显示给用户。



在Cake中,Model描述数据表或记录,以及他们之前的关系,或与其他数据表和记录的关系。Model也包含数据检验规则,当数据被插入或修改时就会被应用。View管理Cake的输出表现,这些实际上是一些包含了PHP代码的HTML文件。Cake的控制器(controller)处理服务器上的请求。它接用户的输入(URL和提交的数据),调用逻辑过程,使用Model来将数据从数据库中读出或写入到数据库中,或者其他什么地方。最后,控制器把要输出的数据交给适当的View层文件来进行输出。


为了使您组织您的程序尽可能地简单方便,我们使用了这样一种方式。它不仅可以控制您程序内部各个部件的关系,还可以让您知道您的程序是怎么存储的。下面就来介绍。


Section 3



Cakephp的布署简介


当您在您的服务器上解开文件包,您会看到这三个目录:


app
cake
vendors


cake 目录就是Cake的核心库文件,您就让它呆那好了,别去碰它。


app 目录就是用来放置您的程序的地方。将cake 目录和 app 目录分开,是为了方便您创建许多应用,但是这些应用之前还是共享一个Cake 库。这也使得Cakephp的升级比较方便。您只需要下载最新版的CakePHP库文件并覆盖当前文件。不用担心会覆盖您写好的程序文件。


您可以使用vendors目录来放置第二方的库文件。以后您将会了解更多关于vendors,现在您只需要记住用使用Cake的
vendor() 函数就可以访问您放置在vendors目录中的类.


现在我们看一看app目录下的完整的文件结构。

/app
/config - Contains config files for your database, ACL, etc.

/controllers - Controller放在这里
/components - 组件放在这里

/index.php - Allows you to deploy cake with /app as the DocumentRoot

/models - Models go here

/plugins - Plugins go here

/tmp - Used for caches and logs

/vendors - Contains third-party libaries for this application

/views - Views go here
/elements - Elements, little bits of views, go here
/errors - Your custom error pages go here
/helpers - Helpers go here
/layouts - Application layout files go here
/pages - Static views go here

/webroot - The DocumentRoot for the application
/css
/files
/img
/js

/cake - Cake’s core libraries. Don’t edit any files here.

index.php

/vendors - Used for server-wide third-party libraries.

VERSION.txt - Let’s you know what version of Cake you’re using.

推荐一个小站:百度粉丝网:

11月 2, 2006 on 9:23 pm | In 未分类 | No Comments

百度粉丝网(http://www.kissbaidu.com)是我的一个朋友做。不过就是域名取的有点肉麻。
站点是简洁的messenger Live的风格,基于PJblog这款优秀的程序搭建。
我不喜欢介入到Google 和百度的纷争中去,但站中有一些说的很在理,我很支持。
因为网上有人说李yanhong有美国绿卡,百度的注册地在英属开曼群岛,所以百度是算一个外国公司。这点kissbaidu说的很明白:
百度的注册地在英属开曼群岛是基于避税的考虑,新浪的注册地也在英属开曼群岛。这个概念跟是外国这个概念没一点关系.
难得争论什么,喜欢争baidu跟google谁好谁坏的,可以去那儿争。
我可不想把我的博客变成techwe或donews.我远离是非。

老婆大人的博客也开通了!

11月 2, 2006 on 8:48 pm | In 未分类 | No Comments

哈哈。
域名是http://wife.deskor.com
如果可能,我把http://wife.162cm.com 也绑定上去。

如何用php和AJAX来创建mailing List (译文,勿转载。)

11月 1, 2006 on 10:40 pm | In 未分类 | No Comments


Use AJAX and PHP to Build your Mailing List
By Aarron Walter
November 1st 2006
Reader Rating: Not rated yet

一个设计优雅,内容充实的网站,没有用户的参与,也是没有生命力的。选择邮件列表作为你的用户与网站之前交互的工具,是一个不错的选择。如果访问者喜欢并且相信您的网站,他们会很信任地把他们的邮件地址告诉佻,毕竟,他们也希望能够 得关于新产品,文章或其他有关信息的通知。这是一个在您的访问者之间建立关系网的不错的方法,并且还能让他一次又一次地访问您的网站,成为您网站的回头客。
在这篇文章中,我们将会用AJAX来接受用户提交的邮件订阅地址,这样就不用刷新页面。用这样一种方法,您的提交过程序会轻松许多。同时,我们的AJAX的提交表格也能接纳那些并不使用支持AJAX技术的浏览器的用户.
这篇文章假定您的mailing list 是储存在Mysql数据库中的。但是只要加上合适的代码,文章中的代码就能很好地适合您自己的应用。

在开始之前,请 href="http://www.sitepoint.com/examples/mailinglist/code-archive.zip">下载代码,看
一看我们要在这篇教程中讲的程序。

[概要]

(奶奶的,这个不好翻译,原文是The Big Picture)
我们的mailing list 登记过程有三个要素:

在php脚本中的一段HTML 表单代码,用来接受用户的邮件地址.
一段javascript代码,监听用户提交表单的事件,并调用AJAX过程,发送Email地址。

一个简单的PHP代码,以接受邮件地址。他会检查邮件地址是否出错,并储存到Mysql数据库中。一个告诉用户操作是成功还是失败的信息会返回给HTML页。
我们同时需要保证登记过程对所有用户是正常可用的,因此写了一个php储存的过程,这样那些浏览器不支持Javascript的用户也能正常使用。

为了简化我们的AJAX编程,我们将用一个通用的javascript库(Prototype)来监听表单提交事件,并处理Ajax消息。如果您是一个Prototype的初学者,建议您看看Dan Webb的文章 href="http://www.sitepoint.com/article/painless-javascript-prototype">Painless
JavaScript Using Prototype
and href="http://www.sitepoint.com/article/javascript-library">The JavaScript
Library World Cup
.

表单提交过程

我们的第一步是建立表单以接受邮件地址。然后我们调用javascript来发送消息。这就是表单代码:

  1. <form id="addressForm" action="index.php" method="get"> 
  2.  <fieldset> 
  3.    <legend>Join our mailing list!</legend> 
  4.    <p> 
  5.      <input type="text" name="address" id="address" /> 
  6.      <input type="submit" value="Sign Up" /> 
  7.    </p> 
  8.    <p id="response"><?php echo(storeAddress()); ?></p> 
  9.  </fieldset> 
  10. </form>

表单是相当地简单。我们只弄了一个text类型的输入框,用来接受用户的邮件地址,然后放了一个submit按钮,用来激发Ajax事件。表单的ID必须确定,因为要靠它来激活javascript对提交事件的监听。

注意表单文字中有一个PHP函数:storeAddress.这是我们实现登记过程的可用性的核心。当这个页面第一次载入时,storeAddress返回一个空格,这样整段文字显示空。稍后,当Ajax过程被用户的提交事件激发后,Javascript会往这一段中加入消息,以让用户知道我们做了什么事。另外,如果用户客户端并没有开启对javascript的支持,那这个页面会被再次调入。这会导致storeAddress被再次调用。这一次,会显示一段消息。
在页面的头部,我们需要用<script> 标记链入Prototype库.我们也需要链入mailingList.js,这样代码将会是这样了:

  1. <script type="text/javascript" src="js/prototype.js"></script> 
  2. <script type="text/javascript" src="js/mailingList.js"></script>

这种架构的优雅之处就在于,不同的功能之间完全分开了,使得开发和维护更方便了。

用AJAX来发送邮件地址

在js目录中,除开progotype.js文件之外,另外一个是mailinglist.js.这个文件是特别征对我们的html页面的AJAX应用的。这个文件的第一个应用就是往表单中添加一个事件监听器,由这个事件监听器来调用AJAX过程。当然,我们不能直接这么干,得等页面加载完成之后。而页面加载完成这个事件是是window这个对象的load事件来通知的。
为了添加这个事件监听器,我们需要用到Prototype的一个叫observe的很方便的方法。我们首先添加页面的load的事件的监听。
在这个监听器中,我们可以为表单的提交事件也加上我们的监听器

  1. // Attach handler to window load event
  2. Event.observe(window, 'load', init, false);
  3.  
  4. function init() {
  5. // Attach handler to form's submit event
  6. Event.observe('addressForm', 'submit', storeAddress);
  7. }

注意,当表单被提交时,监听器会调用一个叫storeAddress的Javascript方法。这个方法包含了一个到PHP脚本的Ajax调用。脚本是这样的:

  1. function storeAddress(e) {
  2. // Update user interface
  3. $('response').innerHTML = 'Adding email address...';
  4. // Prepare query string and send AJAX request
  5. var pars = 'address=' + escape($F('address'));
  6. var myAjax = new Ajax.Updater('response', 'ajaxServer.php', {method: 'get', parameters: pars});
  7. // Stop form from submitting when JavaScript is enabled
  8. Event.stop(e);
  9. }

这个方法(函数)是非常简单的。它先显示”Adding email address…”以告知用户我们在做什么。接着,我们收集表单的信息,以便于发送AJAX请求。注意我们通过一个叫$F的函数来访问文本框的内容。这个函数接受的参数是HTML元素的ID,返回这个元素的值。我们使用javascript的escape函数来将用户的输入换成Unicode格式。这样,要发送给PHP script的url就已经准备好了。
接下来,就是最重要的部分了:Ajax.Updater对象的创建。当我们创建好Ajax.Updater对象时,我们把这些参数传给他:

我们希望在它的里面显示服务器端返回的内容的那个元素的ID
php 脚本的地址
您希望发送给服务器端的内容,以及发送方法。(POST还是GET)
Ajax.Updater会发送邮件地址,然后会很老实地等着服务器端的返回。当它收到回信儿,它就会在”Adding email address…” 那个地方显示出来。最后,我们调用 Event.stop(Prototype上提供的另一个方法)来停止表音的提交过程。(事实上,这个表单还正在往服务器上提交数据呢。)

设置Mailinglist数据库

在我们写任任PHP脚本之前,我们需要一个地方来储存他们。这段sql脚本会创建一个叫mailinglist的表。

  1. CREATE TABLE `mailinglist` ( 
  2.  `id` INT NOT NULL AUTO_INCREMENT ,
  3.  `email` TEXT NOT NULL ,
  4.  PRIMARY KEY ( `id` ) 
  5. );

后面的老子懒得翻了,老外的技术也就这德性。后面的会php的都会。没技术含量。需要的,自个儿下代码慢慢看吧。

« 上一页

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^