收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 5535|回复: 23

[php] XajaxBook By PHP+Mysql+Xajax+Adodb[已更新]

[复制链接]
发表于 2007-10-26 16:42:38 | 显示全部楼层 |阅读模式
首先感谢大家对XajaxBook的关心和支持,新版中放弃了Smarty,当初加入也是为了学习一下smarty,其实臃肿的adodb也可以去掉,但自己已经习惯了用这个数据库操作类了就不再另外写了,代码也很简单,大家可以拿自己的数据库操作类来替换掉,新版加入了管理功能,可以删除回复留言,查看留言者IP地址,管理帐号密码就放在config文件里面,没有用数据库,大家可以修改成数据库的安全性会好一点,感冒折磨的我什么都不想做了,原谅我的偷懒吧

演示:http://www.im502.com/demo/XajaxBook/
管理帐号:admin 密码:123456

应用案例:http://www.797audio.com/gb/

废话少说,看目录结构:
|+adodb  
|+images
|+xajax
|-al.js
|-init.php
|-db.config.php
|-index.php
|-gb.sql


数据库:
CREATE TABLE `aj_book` (
  `id` int(8) NOT NULL auto_increment,
  `nickname` varchar(200) NOT NULL,
  `email` varchar(200) NOT NULL,
  `homepage` varchar(200) NOT NULL,
  `ip` varchar(200) NOT NULL,
  `post` text NOT NULL,
  `posttime` datetime NOT NULL,
  `reply` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='post' AUTO_INCREMENT=34 ;

--
-- 导出表中的数据 `aj_book`
--

INSERT INTO `aj_book` (`id`, `nickname`, `email`, `homepage`, `ip`, `post`, `posttime`, `reply`) VALUES
(1, 'Lily', 'adfa', 'asdfa', '127.0.0.1', 'dsafdfd', '2007-10-19 11:30:22', 're'),
(2, 'Tom', 'adfaw', 'wewqq', '127.0.0.1', 'fadfdafadf', '2007-10-19 11:31:17', '', '0000-00-00 00:00:00'),


db.config.php

  1. <?php
  2. /**
  3. * XajaxBook 留言簿数据库配置文件
  4. * ============================================================================
  5. * 本软件欢迎转载 但请保留作者信息
  6. * 网站地址: http://www.im502.com
  7. * ============================================================================
  8. * @file:       db.config.php
  9. * @author:     im502 <im502@126.com>
  10. * @version:    V1.0 Beta
  11. * @update:     2007-11-5
  12. * ---------------------------------------------
  13. */
  14. // database host
  15. $db_host   = 'localhost';

  16. // database name
  17. $db_name   = 'mydb';

  18. // database username
  19. $db_user   = 'root';

  20. // database password
  21. $db_pass   = 'password';
  22. //manage username
  23. $adminnane='797audio';
  24. //password
  25. $gbpass='35845268c63ab03ef60f625e92cf6dff';
  26. ?>
复制代码


init.php

  1. <?php
  2. /**
  3. * XajaxBook 留言簿公用文件
  4. * ============================================================================
  5. * 本软件欢迎转载 但请保留作者信息
  6. * 网站地址: http://www.im502.com
  7. * ============================================================================
  8. * @file:       init.php
  9. * @author:     im502 <im502@126.com>
  10. * @version:    V1.0 Beta
  11. * @update:     2007-11-5
  12. * ---------------------------------------------
  13. */

  14. /*包含数据库连接文件,adodb类库,xajax类库*/
  15. include_once("db.config.php");
  16. require_once("adodb/adodb.inc.php");
  17. require_once("xajax/xajax.inc.php");

  18. /* 初始化数据库类 */
  19. $db = &NewADOConnection('mysql');
  20. $db->Connect($db_host, $db_user, $db_pass, $db_name) or die("Connect database failed");
  21. $db->query("SET NAMES 'gb2312';");
  22. $db->debug = 0;//是否开启mysql侦错
  23. ?>
复制代码


index.php


  1. /<?php
  2. /**
  3. * XajaxBook 留言簿主程序文件
  4. * ============================================================================
  5. *  本软件欢迎转载 但请保留作者信息
  6. * 网站地址: http://www.im502.com
  7. * ============================================================================
  8. * @file:       index.php
  9. * @author:     im502 <im502@126.com>
  10. * @version:    V1.0 Beta
  11. * @update:     2007-11-5
  12. * ---------------------------------------------
  13. */

  14. session_start();
  15. /* 包含公共文件 */
  16. require_once ('init.php');

  17. $xajax = new xajax();
  18. //$xajax->debugOn();//开启调试
  19. $xajax->decodeUTF8InputOn();

  20. /* xml字符过滤函数*/
  21. function xml_escape($string) {
  22.         return str_replace(array('&','"',"'",'<','>'),
  23.                 array('&','"','&apos;','&lt;','&gt;'),
  24.                 $string       
  25.         );
  26. }
  27. /**
  28. * 获得用户的真实IP地址
  29. *
  30. * @access  public
  31. * @return  string
  32. */
  33. function real_ip()
  34. {
  35.         if (isset($_SERVER))
  36.         {
  37.                 if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
  38.                 {
  39.                         $arr = explode(',', $_SERVER["HTTP_X_FORWARDED_FOR"]);

  40.             /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
  41.             foreach ($arr AS $ip)
  42.             {
  43.                 $ip = trim($ip);

  44.                 if ($ip != 'unknown')
  45.                 {
  46.                     $realip = $ip;
  47.                     break;
  48.                 }
  49.             }
  50.                 }
  51.                 elseif (isset($_SERVER["HTTP_CLIENT_IP"]))
  52.                 {
  53.                         $realip = $_SERVER["HTTP_CLIENT_IP"];
  54.                 }
  55.                 else
  56.                 {
  57.                         $realip = $_SERVER["REMOTE_ADDR"];
  58.                 }
  59.         }
  60.         else
  61.         {
  62.                 if (getenv('HTTP_X_FORWARDED_FOR'))
  63.                 {
  64.                         $realip = getenv('HTTP_X_FORWARDED_FOR');
  65.                 }
  66.                 elseif (getenv('HTTP_CLIENT_IP'))
  67.                 {
  68.                         $realip = getenv('HTTP_CLIENT_IP');
  69.                 }
  70.                 else
  71.                 {
  72.                         $realip = getenv('REMOTE_ADDR');
  73.                 }
  74.         }

  75.         return $realip;
  76. }
  77. /* 注册xajax自定义函数*/
  78. $xajax->registerFunction("postmessage");
  79. $xajax->registerFunction("show");
  80. $xajax->registerFunction("adminlogin");
  81. $xajax->registerFunction("logout");
  82. $xajax->registerFunction("del");
  83. $xajax->registerFunction("reply");
  84. $xajax->registerFunction("addreply");


  85. /* 创建自定义函数postmessage()*/
  86. /**
  87. * 发布留言
  88. *
  89. * @access  public
  90. * @param   string      $from       表单ID
  91. * @return  void
  92. */
  93. function postmessage($form)
  94. {
  95.      global $db;
  96.          $objResponse = new xajaxResponse();

  97.          /* 获取表单传递的参数 */
  98.          $Nick=xml_escape($form['Nick']);
  99.          $HomePage=xml_escape($form['HomePage']);
  100.      $Email=xml_escape($form['Email']);
  101.          $Message=xml_escape($form['Message']);
  102.          $ip=real_ip();
  103.      $errmsg=""; //初始化错误提示
  104.          /* 表单验证 */
  105.      if (trim($Nick) == "")  $errmsg.="Nick is required!\n";   
  106.      else if (trim($Message) == "") $errmsg.="Message is required!\n";
  107.      else if (!(preg_match("/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/", $Email)))  $errmsg.="Email is wrong!\n";
  108.      else if ($errmsg=="")
  109.      {
  110.          /* 入库操作 */
  111.                  $sql="insert into aj_book(nickname,email,homepage,ip,post,posttime) values('$Nick','$Email','$HomePage','$ip','$Message',NOW())";
  112.          $result=$db->Execute($sql);
  113.                  $rs=$db->getRow("select * from aj_book where id=".$db->Insert_ID());

  114.                  if($rs)
  115.                  {
  116.                          $scontent.='<div class="post" id="post_'.$rs[id].'">'.'        <h3>Nick Name : <a href="mailto:'.$rs[email].'" title="send mail">'.$rs[nickname].'</a> |  <a href="'.$rs[homepage].'">HomePage</a> | Post at '.$rs[posttime].'</h3>'.'        <div class="entry">'.nl2br($rs[post]).'</div></div>';
  117.                          /* 将新入库的记录用xajaxResponse的addPrepend 插入最新留言位置
  118.                          注意此处为减轻服务器负担不再调用分页重载,所以新插入后分为位置显示的留言总条数等信息并没有更新
  119.                          页面的记录也比分页中的per_page多了一条出来,本人觉得这样做无伤大雅 ^_^
  120.                          如需要重载可将下面的语句替换为:$objResponse->addScript("xajax_show();");
  121.                          */
  122.              $objResponse->addPrepend("content","innerHTML",$scontent);
  123.                  }
  124.                  else
  125.                  {
  126.                          $db->die();
  127.                  }
  128.      }
  129.      else
  130.      {
  131.                 //弹出错误信息
  132.                 $objResponse->addAlert($errmsg);  
  133.      }
  134.    
  135.      return $objResponse;
  136. }
  137. /* 创建自定义函数login()*/
  138. /**
  139. * 登录
  140. *
  141. * @access  public
  142. * @param   string      $from       表单ID
  143. * @return  void
  144. */
  145. function adminlogin($form)
  146. {
  147.      global $db,$adminnane,$gbpass;
  148.          $objResponse = new xajaxResponse();

  149.          /* 获取表单传递的参数 */
  150.          $admin=trim($form['admin']);
  151.          $pass=md5($form['pass']);
  152.      $errmsg=""; //初始化 错误提示
  153.          /* 表单验证 */
  154.      if(!($admin==$adminnane))
  155.      {
  156.         $errmsg.="Username is wrong!\n";
  157.      }
  158.      else if(!($pass==$gbpass))
  159.      {
  160.         $errmsg.="Password is wrong!\n";
  161.      }
  162.      if ($errmsg=="")
  163.      {
  164.         // 登录成功 注册session
  165.                 $_SESSION['admin']=$admin;
  166.             $objResponse->addScript("xajax_show();");//重载message,出现回复和删除的链接
  167.                 //登录后将登录按钮变为注销
  168.             $objResponse->addAssign("log","innerHTML",'<a href="javascript:void(0)" onclick="xajax_logout();">Logout</a>');
  169.      }
  170.          //弹出提示信息
  171.          else  $objResponse->addAlert($errmsg);
  172.      return $objResponse;
  173. }
  174. /* 创建自定义函数logout()*/
  175. /**
  176. * 注销
  177. *
  178. * @access  public
  179. * @param   string      $from       表单ID
  180. * @return  void
  181. */
  182. function logout()
  183. {
  184.          $objResponse = new xajaxResponse();
  185.          session_destroy();
  186.          $objResponse->addScript("xajax_show(1);");
  187.          $objResponse->addAssign("log","innerHTML",'<a href="javascript:void(0)" onclick="lAlert();">Manage</a>');
  188.      return $objResponse;
  189. }
  190. /* 创建自定义函数reply()*/
  191. /**
  192. * 回复留言
  193. *
  194. * @access  public
  195. * @param   string      $id       留言ID
  196. * @return  void
  197. */
  198. function reply($id)
  199. {
  200.         $objResponse = new xajaxResponse();
  201.         //点回复后在对应的位置出现发表回复的输入框和提交按钮
  202.         $content='<form id="rform" name="rform" onSubmit="postReply();" action="javascript:void(null);" method="post" enctype="multipart/form-data"><textarea name="re" id="re" cols="60" rows="5" ></textarea><input name="id" id="id" type="hidden" value="'.$id.'" /><input name="rep" id="rep" type="submit" value="Reply" /></form>';
  203.         $objResponse->addAssign("reply_".$id,"innerHTML",$content);
  204.              
  205.     return $objResponse;
  206. }

  207. /* 创建自定义函数addreply()*/

  208. /**
  209. * 回复留言的处理
  210. *
  211. * @access  public
  212. * @param   string      $$form       留言ID
  213. * @return  void
  214. */
  215. function addreply($form)
  216. {
  217.         global $db;
  218.         $objResponse = new xajaxResponse();
  219.         /* 获取表单传递的参数 */
  220.         $re=xml_escape($form['re']);
  221.         $id=$form['id'];
  222.         $content="<strong>Reply:</strong>".nl2br($re);
  223.         $objResponse->addAssign("reply_".$id, "innerHTML", "");       
  224.         $db->query("update aj_book set reply='".$re."' where id=".$id);
  225.         $objResponse->addAssign("reply_".$id, "innerHTML", $content);
  226.      
  227.     return $objResponse;
  228. }
  229. /* 创建自定义函数show()*/

  230. /**
  231. * 显示留言及分页功能
  232. *
  233. * @access  public
  234. * @param   string      $page       页码
  235. * @return  void
  236. */
  237. function show($page=1)
  238. {
  239.     global $db;

  240.         $page=intval($page);
  241.         $objResponse = new xajaxResponse();
  242.     //每页显示的记录数
  243.     $per_page = 10;
  244.         /* 获取留言总条数 */
  245.     $num = $db->getOne("select count(*) as nums from aj_book");
  246.        
  247.         if($page<1||$page>ceil($num/$per_page)) $page=1;//判断自定义输入跳转页面是否越界
  248.     $offset = ($page - 1) * $per_page;
  249.         /* 没有留言时显示 */
  250.     if($num <1)
  251.         {
  252.         $objResponse->addAssign('content', 'innerHTML', 'No message!');
  253.         return $objResponse;
  254.     }

  255.         $sql="select * from aj_book order by id desc limit ".$offset.",".$per_page;
  256.         $rsr=$db->getAll($sql);
  257.         if($rsr)
  258.         {
  259.                 /* 循环读出分页留言 */
  260.                 foreach($rsr as $rs)
  261.                 {
  262.                         $scontent.='<div class="post" id="post_'.$rs[id].'">'.'        <h3>Nick Name: <a href="mailto:'.$rs[email].'" title="send mail">'.$rs[nickname].'</a> |  <a href="'.$rs[homepage].'">HomePage</a>  | Post at '.$rs[posttime];
  263.                         if(!empty($_SESSION['admin']))
  264.                         {
  265.                                 $scontent.=' | <a href="javascript:void(0)" onclick="if(confirm(\'Are you sure you want to delete the message?\')){xajax_del('.$rs[id].')} return false;">Delete</a> | <a href="javascript:void(0)" onclick="xajax_reply('.$rs[id].');">Reply</a>';
  266.                         }
  267.                         $scontent.='</h3>'.'        <div class="entry">'.nl2br($rs[post]).'</div><div id="reply_'.$rs[id].'" class="reply">';
  268.                         if(!empty($rs[reply]))
  269.                         {
  270.                                 $scontent.='<strong>Reply:</strong>'.nl2br($rs[reply]);
  271.                         }
  272.                          $scontent.='</div></div>';
  273.                 }
  274.                  /* 赋值留言内容给content对象 */
  275.                  $objResponse->addAssign("content","innerHTML",$scontent);
  276.         }
  277.         else
  278.         {
  279.                  $db->die();
  280.         }
  281.         /* 开始分页 */
  282.         if($num)
  283.     {
  284.          if($num % $per_page)
  285.                  {
  286.                           $pageCount = (int)($num / $per_page) + 1;
  287.          }
  288.                  else
  289.                  {
  290.               $pageCount = $num / $per_page;
  291.                  }
  292.     }
  293.     else
  294.         {
  295.          $pageCount = 0;
  296.     }
  297.     /* 初始化分页导航*/
  298.         $nav = "";
  299.     $nextPage = $page + 1;
  300.     $prevPage = $page - 1;
  301.         /* 总记录数与分页信息*/
  302.     $nav.='<a class="nolink" title="Total Records">'.$num.'</a><a class="nolink">'.$page.'/'.$pageCount.'</a>';
  303.         /* 首页与前页的判断显示 */
  304.         if($page == 1)
  305.     {
  306.          $nav .= '';
  307.      }
  308.          else
  309.         {
  310.          $nav .= '<a href="javascript:void(0);" onclick="xajax_show(1);" title="First Page">|<</a>';
  311.          $nav .= '<a href="javascript:void(0);" onclick="xajax_show('.$prevPage.');" title="Previous Page"><<</a>';
  312.         }
  313.         /* 数字分页的显示 */
  314.     $plus=ceil($per_page/2);
  315.     if(($per_page-$plus+$page)>$pageCount)$plus=($per_page-$pageCount+$page);
  316.     $begin=$page-$plus+1;
  317.     $begin=($begin>=1)?$begin:1;
  318.     $nav .='';
  319.     for($i=$begin;$i<$begin+$per_page;$i++)
  320.     {
  321.                 if($i<=$pageCount)
  322.                 {
  323.                         if($i!=$page)
  324.                         $nav.='<a href="javascript:void(0);" onclick="xajax_show('.$i.');">'.$i.'</a>';
  325.                         else
  326.                         $nav.='<a class="curr" title="Current Page">'.$i.'</a>'; //当前页
  327.                 }
  328.                 else
  329.                 {
  330.                         break;
  331.                 }
  332.     }
  333.     unset($begin);

  334.         /* 后页与尾页的判断显示 */
  335.     if( ($page == $pageCount) || ($pageCount == 0) )
  336.         {
  337.          $nav .= '';
  338.     }
  339.         else
  340.         {
  341.          $nav .= '<a href="javascript:void(0);" onclick="xajax_show('.$nextPage.');" title="Next Page">>></a>';
  342.          $nav .= '<a href="javascript:void(0);" onclick="xajax_show('.$pageCount.');" title="Last Page">>|</a>';
  343.     }
  344.         /* 跳转页 */
  345.         $nav .= '<input type="text" name="custompage" onKeyDown="if(event.keyCode==13) {xajax_show(this.value); return false;}">';
  346.         //$objResponse->addAlert($nav);
  347.         /* 分页导航赋值 */
  348.         $objResponse->addAssign("pagebar","innerHTML",$nav);

  349.         return $objResponse;
  350. }
  351. /* 创建自定义函数del()*/

  352. /**
  353. * 删除留言功能
  354. *
  355. * @access  public
  356. * @param   string      $id       留言ID
  357. * @return  void
  358. */
  359. function del($id)
  360. {
  361.     global $db;

  362.         $objResponse = new xajaxResponse();
  363.         $db->Execute("delete from aj_book where id=".$id);
  364.         //此处也没有重载,需要的可以将下句替换为:$objResponse->addScript("xajax_show();");
  365.         $objResponse->addRemove("post_".$id);
  366.           
  367.         return $objResponse;
  368. }

  369. $xajax->processRequests();
  370. //根据登录状态显示登录或注销链接,页面刷新后有效
  371. $logstr=$_SESSION[admin]=="" ? '<a href="javascript:void(0)" onclick="lAlert();">Manage</a>'  : '<a href="javascript:void(0)" onclick="xajax_logout();">Logout</a>';
  372. ?>
  373. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  374. <html xmlns="http://www.w3.org/1999/xhtml">
  375. <head>
  376. <meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
  377. <meta name="Author" content="im502,im502(at)126.com" />
  378. <meta name="keywords" content="php,mysql,ajax,xajax,adodb,smarty,js,javascript,guestbook,book,gbook,phpbook,im502" />
  379. <meta name="description" content="a guest book power by php,mysql,xajax,adodb,smarty" />
  380. <link rel="stylesheet" href="images/style.css" type="text/css" />
  381. <title>XajaxBook by php+mysql+xajax+adodb </title>
  382. <?php echo $xajax->getJavascript('./xajax/'); ?>
  383. <script type="text/javascript">
  384. //传递表单
  385. function loginn(){
  386.       xajax_adminlogin(xajax.getFormValues("login"));
  387.       return false;
  388. }
  389. function post(){
  390.       xajax_postmessage(xajax.getFormValues("postform"));
  391.       return false;
  392. }
  393. function postReply(){
  394.       xajax_addreply(xajax.getFormValues("rform"));
  395.       return false;
  396. }
  397. </script>
  398. </head>
  399. <body onload="xajax_show()">
  400. <!--加载需要弹出半透明渐变层的js-->
  401. <script type="text/javascript" src="al.js"></script>
  402. <div id="wrap">
  403.     <div id="header"></div>
  404. <div id="sidebar">
  405. <ul>
  406.         <li>
  407.                 <h2>Navigation</h2>
  408.                         <ul>
  409.                                 <li><a title="Show message" href="javascript:void(0)" onclick="xajax_show();">Show Message</a></li>
  410.                                 <li><a href="javascript:void(0)" onclick="sAlert();" title="Post a message">Post Message</a></li>
  411.                                 <li id="log"><?php echo $logstr; ?></li>
  412.                         </ul>
  413.         </li>
  414. </ul>
  415. </div>
  416. <script type="text/javascript">
  417. <!--
  418. xajax.loadingFunction = function(){
  419. xajax.$('cLoadingIndicator').style.display='block';
  420. };
  421. xajax.doneLoadingFunction = function(){
  422. xajax.$('cLoadingIndicator').style.display = 'none';
  423. }
  424. // -->
  425. </script> <div id="cLoadingIndicator" style="display:none">
  426.                         <span ><img src="images/load.gif"> loading...</span>
  427.                 </div>
  428.         <div id="content"></div>
  429.         <div id="pagebar"></div>
  430. <div id="footer">
  431.         <p>
  432.                 Copyright &copy; <a href="http://www.im505.com">im502.com</a> | XajaxBook By PHP+Mysql+Xajax+Adodb
  433.         </p>
  434. </div>
  435. </div>
  436. </body>
  437. </html>
复制代码


下载: gb.rar (264.65 KB, 下载次数: 368)
发表于 2007-10-26 16:45:37 | 显示全部楼层
教程比较系统~如果能整理并去除<meta name="Author" content="<{$Author}>">这些代码的话就更容易供人察看了。(专为教程缩写的代码的话,建议只保留一个meta,数据库数据也尽量精简,h1\class等修饰界面效果的尽量去除。当然这只是我学习的意愿而已)。
注释还算到位,不过一些虽然简单但新人常常会开帖发问的地方还是给点注释好,比如$db->query("SET NAMES 'gb2312';");就经常会有人问为何读取数据是乱码,此时加上注释就能让人在应用中学习的效果了。

楼下的powerzl 观察的非常仔细!!

[[i] 本帖最后由 kuhanzhu 于 2007-10-26 19:56 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-26 16:50:50 | 显示全部楼层
呵呵,不知道有多少人对这个感兴趣,经过这几天的学习,觉得xajax这个东东真的很不错 不懂稍懂点js就可以Ajax网站了

我发布的是一个无图版的留言程序,CSS写的也比较乱,欢迎大家修改,如果愿意的话将修改后的程序发一份到我的邮箱:im502@126.com
回复 支持 反对

使用道具 举报

发表于 2007-10-26 18:16:39 | 显示全部楼层
不错,支持一下~~~  学习价值很大~
回复 支持 反对

使用道具 举报

发表于 2007-10-26 18:50:37 | 显示全部楼层
编码有问题,中文乱码

页面设置的是utf-8,插入的却是GB2312

[[i] 本帖最后由 powerzl 于 2007-10-26 18:52 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-26 19:38:07 | 显示全部楼层
原帖由 [i]powerzl 于 2007-10-26 18:50 发表
编码有问题,中文乱码

页面设置的是utf-8,插入的却是GB2312


谢谢提醒 我也是刚发现!
回复 支持 反对

使用道具 举报

发表于 2007-10-27 11:12:42 | 显示全部楼层
这么爽滴效果,看来要好好研究研究 
回复 支持 反对

使用道具 举报

发表于 2007-10-27 22:10:10 | 显示全部楼层
感谢分享.研究中
回复 支持 反对

使用道具 举报

发表于 2007-10-27 23:51:59 | 显示全部楼层
你那么多js的字符串输出不是可以用服务器PHP借助smarty模板实现更好么。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-29 13:05:44 | 显示全部楼层
原帖由 [i]5do8 于 2007-10-27 23:51 发表
你那么多js的字符串输出不是可以用服务器PHP借助smarty模板实现更好么。

用那么多js字符串输出是为了实现那个渐变的半透明层效果,华而不实,应该用一个简单的表单提交更好,直接在xajax里输出。

原帖由 [i]powerzl 于 2007-10-26 18:50 发表
编码有问题,中文乱码

页面设置的是utf-8,插入的却是GB2312  



已经修改了,加上下面这一句在实例化类后面
  1. $xajax->decodeUTF8InputOn();
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-10-29 13:12:39 | 显示全部楼层
呵呵,辛苦了,
回复 支持 反对

使用道具 举报

发表于 2007-11-1 15:07:01 | 显示全部楼层
老二,不好意思,刚才去你的DEMO里刷了一条,我是想试下换行的问题。
用word-wrap可以解决,却通不过W3C。
回复 支持 反对

使用道具 举报

发表于 2007-11-1 16:23:34 | 显示全部楼层
另外,刚才DOWN了你的CODE,看了下,发现XAJAX还不是很好,不能完全将数据和HTML代码分离,失去了使用SMARTY的初衷。

再者,如果我刚刚完成一条留言,那么第一页就有了11条留言,而不是10条。当然,这无伤大雅。但如果要解决,还是要自己写JS操纵DOM了。看来,光会用XAJAX还不行,JS也是WEB开发不可或缺的啊。
回复 支持 反对

使用道具 举报

发表于 2007-11-1 18:49:03 | 显示全部楼层

回复 #13 eclanpsky 的帖子

的确是这样
我现在也的要学js了

RE:IM502
很不好意思,现在才看到你的大作,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-1 20:51:36 | 显示全部楼层
我已经在本地重新写了 但在IE下有些问题所以没有更新上来
再者就是看到关注的人不多
等我明天整理一下 后台管理功能也加上了已经

至于刚写完就多一条留言,其实很好处理,只要在添加的操作后面加上$objResponse->addScript("xajax_show();"); 就可以重载了!

to:psdshow
我照着你的教程做了个loading 但是在IE和OPERA下都有js脚本报错,等我明天研究一下。
回复 支持 反对

使用道具 举报

发表于 2007-11-2 01:40:29 | 显示全部楼层
点击下一页的时候相应特别慢,不知道是什么原因。
回复 支持 反对

使用道具 举报

发表于 2007-11-2 07:57:07 | 显示全部楼层
看了之后感想颇多

smarty完全可以去掉,本来就不使用缓存,而且一共也就那么几个数据,完全可以用php模板,感觉华而不实。

看到模板页那么多的js,就想到如果用jquery就好了,工作量一下能减轻不少。

不过最终的效果还是不错的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-2 08:37:53 | 显示全部楼层
To HmilyHeart : 慢是因为加了sleep(1)的缘故 新版的改成loading了

To lzyy :smarty完全没有必要 我也是这么认为的 之所以加上是因为我在同时学习smarty adodb xajax 所以想都练习一下就加上了,本文开头也有说明,正式版带管理功能的已经去掉了smarty ;模板页js太多一个是由于想做那个弹出留言的时候有渐变效果,像thickbox一样;自己可以根据实际需要简化。
回复 支持 反对

使用道具 举报

发表于 2007-11-2 12:49:39 | 显示全部楼层

回复 #15 老二 的帖子

我自己的那个在IE6 IE7,FF2下都没有提示错误,正常使用
heh...
回复 支持 反对

使用道具 举报

发表于 2007-11-2 13:11:37 | 显示全部楼层
FF下,al.js 的 69行:eSrc.blur(); 64行:eSrc.focus();
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-2 15:31:14 | 显示全部楼层
不带smarty的带管理功能的已经完成了,等我整理一下注释,重新发布上来,没想到编一个留言本也这么累。

to psdshow:loading的问题解决了,是脚本放置的位置不当引起的,折磨了我许久。

原帖由 [i]wenming 于 2007-11-2 13:11 发表
FF下,al.js 的 69行:eSrc.blur(); 64行:eSrc.focus();


这俩个错误我还没有搞明白是什么意思,是从经典论坛抄来的一个效果,等我在详细看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-5 09:11:01 | 显示全部楼层
已经更新了,欢迎继续砸
回复 支持 反对

使用道具 举报

发表于 2007-11-5 17:49:12 | 显示全部楼层
xajax 极其不好用..... 改jquery
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-5 23:51:08 | 显示全部楼层
原帖由 [i]Fanbin 于 2007-11-5 17:49 发表
xajax 极其不好用..... 改jquery

呵呵 个人爱好不同
我用过dojo,但感觉结合php来做简单的ajax效果用xajax还是不错的选择
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-4-3 16:44 , Processed in 0.202608 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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