分类 网页与编程 中的文章

表格奇偶行鼠标经过切换颜色函数

自己写的,很简单,用起来也很方便.

JavaScript代码
  1. function hoverTagBgFromId(domId,hoverTag,color){   
  2. /*  
  3.     切换ID内的标签背景颜色,domId:ID,hoverTag:要切换的标签名称,color:切换的颜色[,arguments[3]:偶数行颜色]  
  4.     http://www.vgot.cn by Pader  
  5. */  
  6.     var hoverElemt = document.getElementById(domId).getElementsByTagName(hoverTag);   
  7.     var formerlyColor = new Array();   
  8.     var len = hoverElemt.length;   
  9.     for(var i=0;i<len;i++){   
  10.         if(typeof(arguments[3]) != 'undefined' && i % 2 == 1) {   
  11.             hoverElemt[i].style.backgroundColor = arguments[3];   
  12.         }   
  13.         if(color != '') {   
  14.             hoverElemt[i].onmouseover = function(){   
  15.                 formerlyColor[i] = this.style.backgroundColor;   
  16.                 this.style.backgroundColor = color;   
  17.             }   
  18.             hoverElemt[i].onmouseout = function(){   
  19.                 this.style.backgroundColor = formerlyColor[i];   
  20.             }   
  21.         }   
  22.     }   
  23. }  

使用方法也很简单

XML/HTML代码
  1. <!-- 这是一个表格 -->  
  2. <table>  
  3. <tbody id="hoverbody">  
  4. <tr><td>LINE</td><td>LINE</td></tr>  
  5. <tr><td>LINE</td><td>LINE</td></tr>  
  6. <tr><td>LINE</td><td>LINE</td></tr>  
  7. <tr><td>LINE</td><td>LINE</td></tr>  
  8. </tbody>  
  9. </table>  

把需要切换和更改颜色的行,也就是 TR 们,用一个 TBODY 包括起来,给它一个ID
然后在表格下面,或者 onload 函数里使用
hoverTagBgFromId("hoverbody","tr","#00FF00");
第一个参数就是 TBODY 的 ID,第二个是要切换颜色的TAG,TR就是表格行,第三个是鼠标经过时的颜色.如果想要偶数行的颜色不同,只需指定第四个参数即可
hoverTagBgFromId("hoverbody","tr","#00FF00","#AEC0F4");

Pader 2009-4-14 0

一个不错的所见即所得编辑器 nicEdit

不记的怎么找到的了,今天到官网上下载了最新版的下来,对脚本汉化了一下,加了两个字体。

些编辑器功能蛮强大的,只有一个核心脚本文件和一张GIF图片,如果再有一个插入高亮代码就更好了。不过用起来总感觉比 Fck 要慢一点。详细用法见内附的 demos,

http://www.vgot.net/_api/nicedit/demos/demo01.html

http://www.vgot.net/_api/nicedit/demos/demo02.html

http://www.vgot.net/_api/nicedit/demos/demo03.html

http://www.vgot.net/_api/nicedit/demos/demo04.html

http://www.vgot.net/_api/nicedit/demos/demo05.html

提供下载:nicedit.zip

Pader 2009-3-15 0

今日写完的缓存类

 尚未完善,大家共同研究

<?php         
/*        
  缓存类 of www.vgot.cn by pader        
  09-1-30 13:34        
*/          
      
define('CACHE_DIR',dirname(__FILE__).'/cache');      
  
class cache {   
    var $cache = array();   
       
    //获取缓存   
    function getCache($cacheName) {   
        include $this->cacheFile($cacheName);   
        $this->cache[$cacheName] = $cache[$cacheName];   
        return $this->cache[$cacheName];   
    }   
  
    //存储缓存   
    function saveCache($cacheName,$cacheVar){   
        $cacheCode = "<?php\r\n//Cache create at ".date('Y-m-d H:i:s')."\r\n";   
        $cacheCode .= '$cache[\''.$cacheName.'\'] = ';   
        $cacheCode .= $this->createVarCode($cacheVar);   
        $cacheCode .= ";\r\n";   
        return $this->writeFile($this->cacheFile($cacheName),$cacheCode) ? true : false;   
    }   
  
    //创建缓存变量原生态代码   
    function createVarCode($myVar,$level=0) {   
        $tabEnd = '';   
        for($i=0;$i<$level;$i++) {   
            $tabEnd .= "\t";   
        }   
        $tab = $tabEnd."\t";   
        if(is_array($myVar)) {   
            $varCode = "array(\r\n";   
            foreach($myVar as $key => $val) {   
                $key = is_numeric($key) ? $key : '\''.$key.'\'';   
                if(is_array($val)) {   
                    $varCode .= $tab.$key.' => '.$this->createVarCode($val,$level + 1);   
                } else {   
                    $varCode .= $tab.$key.' => \''.$this->addslashes($val).'\'';   
                }   
                $varCode .= ",\r\n";   
            }   
            $varCode = substr_replace($varCode,'',-3,1)."$tabEnd)";   
        } else {   
            $varCode = '\''.$this->addslashes($myVar).'\'';   
        }   
        return $varCode;   
    }   
       
    function addslashes($text) {   
        $text = addcslashes($text,'\\');  
        $text = addcslashes($text,'\'');   
        return $text;   
    }   
  
    //返回缓存文件地址   
    function cacheFile($cacheName) {   
        $cacheFile = CACHE_DIR.'/'.$cacheName.'.php';   
        return $cacheFile;   
    }   
  
    function deleteCache($cacheName) {   
        return @unlink($this->cacheFile($cacheName)) ? true : false;   
    }   
  
    function printCache() {   
        print_r($this->cache);   
    }   
  
    //写文件   
    function writeFile($fileName,$content,$wmode='w'){   
        $s = false;   
        if($fp = @fopen($fileName,$wmode)) {   
            if(flock($fp,LOCK_EX)) {   
                $s = @fwrite($fp,$content) ? true : false;    
                flock($fp,LOCK_UN);   
                fclose($fp);   
            }   
        }   
        return $s;   
    }   
}


Pader 2009-1-30 2

在线人数统计BUG

http://www.vgot.net/echo/?action=show&id=175
当在线访问者并未关闭浏览器但超时没有更新页面,当其它访问者访问时因为前访问者的数据超时而被程序丢弃,导致前访问者的数据丢失,当前访问者更新页面时,因为已经有通信ID,数据不会被存储,所以会丢失一些在线的人。

此BUG修复方法为将 38 行改为

PHP代码

if(isset($_COOKIE[$cookiename]) and array_key_exists($_COOKIE[$cookiename],$nowonline)) {

这样如果前访问者再次更新页面,如果他的数据不存在,将会为他更新通信ID,这样便不会造成统计丢失。


以下是更改后带有IP数据的在线人数统计,此版本BUG修复在第 45 行

PHP代码

<?php   
/*  
    @ PHP 在线人数统计程序  
    Copyright (c) www.vgot.cn by Pader 1:25 2009年1月7日  
    Version: 1.0.2  
    Homepage:http://www.vgot.cn  
    QQ: 270075658  
    How to use it: <script src="online.php"></script>  
    note: 一般独立在线人数统计程序都是统计在线的IP数,而这并不准确  
    例如局域网的访问者,比如公司,学校机房和网吧,虽然内网IP不同,但是外网IP都是一样  
    如果同一个局域网的无论多少人人访问你的网站则只被认为是一个人  
    这个小巧的程序解决了此问题,它以电脑为单为,每台电脑便算一个访问者  
    当然因为使用的是COOKIE,如果你在同一台电脑上使用两种不同核心的浏览器访问那就别当别论了  
*/  
$filename = 'online.txt';  //数据文件   
$cookiename = 'VGOTCN_OnLineCount';  //cookie名称   
$onlinetime = 600;  //在线有效时间,单位:秒 (即600等于10分钟)   
  
$online = file($filename);    
$nowtime = time();    
$nowonline = array();   
/*  
    @ 获取当前访问者IP  
        虽然并不以 IP 来统计,但这里需要获取 IP 存储以方便其它程序统计  
*/  
$ipx = $_SERVER['HTTP_X_FORWARDED_FOR'];    
$ip = (($ipx != '') && ($ipx != 'unknown')) ? $ipx : $_SERVER['REMOTE_ADDR'];   
  
/*  
    @ 得到仍然有效的数据  
*/  
foreach($online as $line) {   
    $row = explode('|',trim($line));   
    $sesstime = trim($row[1]);   
    if(($nowtime - $sesstime) <= $onlinetime) {  //如果仍在有效时间内,则数据继续保存,否则被放弃不再统计   
        $nowonline[$row[0]] = $sesstime.'|'.$row[2];  //获取在线列表到数组,会话ID为键名,最后通信时间与IP为键值   
    }   
}   
  
/*  
    @ 创建访问者通信状态  
        使用cookie通信  
        COOKIE 将在关闭浏览器时失效,但如果不关闭浏览器,此 COOKIE 将一直有效,直到程序设置的在线时间超时  
*/  
if(isset($_COOKIE[$cookiename]) and array_key_exists($_COOKIE[$cookiename],$nowonline)) {  //如果有COOKIE即并非初次访问则不添加人数并更新通信时间   
    $uid = $_COOKIE[$cookiename];   
} else {  //如果没有COOKIE即是初次访问   
    $vid = 0;  //初始化访问者ID   
    do {  //给用户一个新ID   
        $vid++;   
        $uid = 'U'.$vid;   
    } while (array_key_exists($uid,$nowonline));   
    setcookie($cookiename,$uid);   
}   
$nowonline[$uid] = $nowtime.'|'.$ip;  //更新现在的时间状态   
  
/*  
    @ 统计现在在线人数  
*/  
$total_online = count($nowonline);   
  
/*  
    @ 写入数据  
*/  
if($fp = @fopen($filename,'w')) {   
    if(flock($fp,LOCK_EX)) {   
        rewind($fp);   
        foreach($nowonline as $fuid => $finfo) {   
            $fline = $fuid.'|'.$finfo."\n";   
            @fputs($fp,$fline);    
        }   
        flock($fp,LOCK_UN);   
        fclose($fp);   
    }   
}   
    echo 'document.write("'.$total_online.'");';   
?>


Pader 2009-1-30 1

PHP 在线人数统计程序

突然想给网站搞个在线人数统计(当然,不是我自己的网站,自己的网站在线人数手指头一伸就数出来了),于是想到很早前收集的一个在线人数统计小程序,但是那个在线统计是以IP来算的,如果我们公司那么一大堆人访问不是只算一个么,于是自己写了一个在线人数统计程序,有多少电脑正打开你的网站就有多少人访问,It's Okay!

看代码:

 

PHP代码
  1. <?php   
  2. /*  
  3.     @ PHP 在线人数统计程序  
  4.     Copyright (c) www.vgot.cn by Pader 1:25 2009年1月7日  
  5.     Homepage:http://www.vgot.cn  
  6.     QQ: 270075658  
  7.     How to use it: <script src="online.php"></script>  
  8.     note: 一般独立在线人数统计程序都是统计在线的IP数,而这并不准确  
  9.     例如局域网的访问者,比如公司,学校机房和网吧,虽然内网IP不同,但是外网IP都是一样  
  10.     如果同一个局域网的无论多少人人访问你的网站则只被认为是一个人  
  11.     这个小巧的程序解决了此问题,它以电脑为单为,每台电脑便算一个访问者  
  12.     当然因为使用的是COOKIE,如果你在同一台电脑上使用两种不同核心的浏览器访问那就别当别论了  
  13. */  
  14. $filename = 'online.txt';  //数据文件   
  15. $cookiename = 'VGOTCN_OnLineCount';  //cookie名称   
  16. $onlinetime = 600;  //在线有效时间,单位:秒 (即600等于10分钟)   
  17.   
  18. $online = file($filename);    
  19. $nowtime = time();    
  20. $nowonline = array();   
  21.   
  22. /*  
  23.     @ 得到仍然有效的数据  
  24. */  
  25. foreach($online as $line) {   
  26.     $row = explode('|',$line);   
  27.     $sesstime = trim($row[1]);   
  28.     if(($nowtime - $sesstime) <= $onlinetime) {  //如果仍在有效时间内,则数据继续保存,否则被放弃不再统计   
  29.         $nowonline[$row[0]] = $sesstime;  //获取在线列表到数组,会话ID为键名,最后通信时间为键值   
  30.     }   
  31. }   
  32.   
  33. /*  
  34.     @ 创建访问者通信状态  
  35.         使用cookie通信  
  36.         COOKIE 将在关闭浏览器时失效,但如果不关闭浏览器,此 COOKIE 将一直有效,直到程序设置的在线时间超时  
  37. */  
  38. if(isset($_COOKIE[$cookiename])) {  //如果有COOKIE即并非初次访问则不添加人数并更新通信时间   
  39.     $uid = $_COOKIE[$cookiename];   
  40. else {  //如果没有COOKIE即是初次访问   
  41.     $vid = 0;  //初始化访问者ID   
  42.     do {  //给用户一个新ID   
  43.         $vid++;   
  44.         $uid = 'U'.$vid;   
  45.     } while (array_key_exists($uid,$nowonline));   
  46.     setcookie($cookiename,$uid);   
  47. }   
  48. $nowonline[$uid] = $nowtime;  //更新现在的时间状态   
  49.   
  50. /*  
  51.     @ 统计现在在线人数  
  52. */  
  53. $total_online = count($nowonline);   
  54.   
  55. /*  
  56.     @ 写入数据  
  57. */  
  58. if($fp = @fopen($filename,'w')) {   
  59.     if(flock($fp,LOCK_EX)) {   
  60.         rewind($fp);   
  61.         foreach($nowonline as $fuid => $ftime) {   
  62.             $fline = $fuid.'|'.$ftime."\n";   
  63.             @fputs($fp,$fline);    
  64.         }   
  65.         flock($fp,LOCK_UN);   
  66.         fclose($fp);   
  67.     }   
  68. }   
  69.     echo 'document.write("'.$total_online.'");';    
  70. ?>  

代码里可能插入的时候带了一些空格程序不能正常运行,可以点附件下载。

Pader 2009-1-7 0