目前共有15篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:台灣正體▼
 
點擊 回復
563 14
【思路】日曆右側活動列表實現持續時間大於1天的活動塊狀顯示
一派掌門 二十級
1樓 發表于:2010-11-10 21:37
一派掌門 二十級
2樓 發表于:2010-11-10 21:39

ot.showing=Array();

先建立數組。假設當前遍歷到2010年11月10日,對應的表格號(var:itemid)是17。該日期下有一個長3天的活動,也就是持續到12日,那麼當前遍歷到10日是該活動就沒有結束,那麼就不顯示右圓角。

 
一派掌門 二十級
3樓 發表于:2010-11-10 21:46

此時把活動id和該活動在表格中的顯示順序記錄入數組ot.showing。

循環段結束,接下來遍歷11日。11日中繼承活動10日的那個長3天的活動(xml中已返回),此時遍歷一下數組:

<?js

for(i=0;i<ot.showing.length;i++){

  dd=ot.showing[i][0]; //活動id

  ddd=ot.showing[i][1]; //表格中的顯示順序

}

?>

 
一派掌門 二十級
4樓 發表于:2010-11-10 21:46
思路又陷入混亂了……整理一下!
 
一派掌門 二十級
5樓 發表于:2010-11-10 21:55

簡單寫一下:當變量j在ot.showing中存在記錄時,用空li標籤霸占當前的位置,然後再輸出當前活動的li標籤,假設那個長3日的活動(以後叫x活動)在10日表格中的顯示序號為1,那麼在11號表格中:

若11號除了x活動外一個活動都沒有,那麼var:activesnum就等於1,遍歷過程如下:

for (j=0;j<activesnum;j++,amn++){

第一次遍歷,var:j等於0,此時剛好指向x活動。由於x活動在10號中的顯示序號為1,當前序號(var:j)是0,那麼10號就不能顯示到……太複雜了,程序中根本無法實現,算了,改用換數組的方法。

 
一派掌門 二十級
6樓 發表于:2010-11-10 22:04

換數組的方法具體是:

ajax返回的xml中的根節點下有很多日期節點,各日期節點下有很多活動節點。先把這些活動節點遍歷進入數組,等待排序:

var dn=Array(); //活動節點

dn[i]=Array(); //dn[i]中i為表格號,值為各活動

假設dn[表格號]的數據格式是:Array("活動數據組","活動數據組",...))

若dn[17]==Array(Array("標題","內容"),Array("22","33"));

主動把數組位置調換一下,再遍歷數組就可以了。

 
一派掌門 二十級
7樓 發表于:2010-11-10 22:38

回覆:6樓

我改在用php-ajax伺服器端排序了

 
一派掌門 二十級
8樓 發表于:2010-11-11 13:24
//排序
   foreach ($stfed as $i=>$v){
    //$stfed:昨天的全部活動,$stf:今天的全部活動
    //$i:活動編號,$v:活動顯示序號
    if (!is_numeric($v)) continue; //若活動顯示序號不是數字
    //若昨天的活動編號今天有,則對齊
    //$i就是昨天的活動編號,首先判斷今天有沒有這個活動,沒有的話就continue
    $Is=arraygetid($stf,$i); //鍵名
    if ($Is<0) continue; //若今天沒有這個活動
    $IS=$str[$Is]; //今天這個活動的顯示序號
    //$v:昨天這個活動的顯示序號
    
    //對齊
   }
 
一派掌門 二十級
9樓 發表于:2010-11-11 13:48
//排序
   foreach ($stfed as $i=>$v){ //★★這個最好再換一下變量★★
    //$stfed:昨天的全部活動,$stf:今天的全部活動
    //$i:活動編號,$v:活動顯示序號
    if (!is_numeric($v)) continue; # 若活動顯示序號不是數字
    //若昨天的活動編號今天有,則對齊
    # $i就是昨天的活動編號,首先判斷今天有沒有這個活動,沒有的話就continue
    $Is=arraygetid($stf,$i); # 鍵名 //★★可能是這個出錯了★★
    if ($Is<0) continue; # 若今天沒有這個活動
    $IS=intval($str[$Is]); # 今天這個活動的顯示序號
    //$v:昨天這個活動的顯示序號
    
    
    //對齊
    # 檢測今天活動的正確位置是否被其他活動占了
    if (isset($std[$v])){
     # 占了就交換位置
     $a=$std[$IS];
     $b=$std[$v];
     $std[$v]=$a;
     $std[$IS]=$b;
     //$debug.=$IS."||||".$v."||||".$dstr;
     //$debug.=sExplode("|",$stfed); //★有誤★
    }else{
     # 沒占
    }
   }
 
一派掌門 二十級
10樓 發表于:2010-11-11 13:48
算了,沒時間了
 
一派掌門 二十級
11樓 發表于:2010-11-11 13:50
時間真是太少了!
 
一派掌門 二十級
12樓 發表于:2010-11-11 22:12
第一步成功了!
 
一派掌門 二十級
13樓 發表于:2010-11-11 22:12
高興ing!
 
一派掌門 二十級
14樓 發表于:2010-11-11 22:13
//排序
   foreach ($stfed as $i=>$v){
    /*
     $stfed:昨天的全部活動,$stf:今天的全部活動
     $i:昨天的活動顯示序號,$v:昨天的活動編號
     若昨天的活動編號今天有,則對齊
     $i就是昨天的活動編號,首先判斷今天有沒有這個活動,沒有的話就continue
    */
    $Is=arraygetid($stf,$v); //獲得今天顯示該活動的序號(錯誤的)
    if ($Is==-1){
     //$v:昨天這個活動的顯示序號
     continue; # 若今天沒有這個活動
    }
    
    //對齊
    # 檢測今天活動的正確位置是否被其他活動占了
    if (isset($std[$i])){
     //占了就交換位置
     $a=$std[$Is]; # 今天活動的錯誤位置的活動數據
     $b=$std[$i]; # 今天活動的正確位置的活動數據
     $std[$i]=$a;
     $std[$Is]=$b;
     # 糾正$stf數組(防止第三日的活動錯位),使各日的活動與第一天平行
     $a=$stf[$Is];
     $b=$stf[$i];
     $stf[$i]=$a;
     $stf[$Is]=$b;
    }else{
     //沒占
    }
   }
 
一派掌門 二十級
15樓 發表于:2010-11-11 22:13
接下來是//沒占
 

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:563 回複數:14
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2010-11-11 22:13
 
©2010-2025 Purasbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。