回精華區
作者amaki.bbs@luna.twbbs.org (巧克力羊) 看板: plan
標題[功能]看板列表/分類列表即時依看板人氣排序
時間月下夜想 (2003/12/31 Wed 12:45:13) Updated: 2006/02/23
※ 引述《Efen.bbs@backwind.g1.dorm.ncku.edu.tw (,,,,,,)》之銘言:
> ptt的即時熱門看版有辦法弄嗎?

  要改這個你要有做看板人氣的程式。

  然後建一個分類叫 HOT,裡面隨便放入一個看板 (因為沒有看板的分類不會出現)

: board.c:mantime_cmp() 在class_load()前加上這支函式

static int
mantime_cmp(a, b)
  short *a;
  short *b;
{
  /* 由多排到少 */
  return bshm->mantime[*b] - bshm->mantime[*a];
}

: board.c:class_load()

+ static int class_hot = 0;

static int
class_load(xo)
  XO *xo;
{
  short *cbase, *chead, *ctail;
  int chn;                    /* ClassHeader number */
+ int bnum = 0;

  ......
  ......

  do
  {
    chn = *chead++;
    if (chn >= 0)       /* 一般看板 */
    {
      val = bits[chn];
      if (!(val & BRD_L_BIT) || (val & zap) || !(brd[chn].brdname[0]))
        continue;

      // 10這個臨界值自定 
+     if (class_hot)
+     {
+       if (bshm->mantime[chn] < 10) /* 只列出人氣超過 10 的看板 */
+         continue;
+       bnum++;
+     }
    }

    ......
    ......

    max++;
    *cbase++ = chn;
  } while (chead < ctail);

+ if (bnum > 0)
+   qsort(cbase - bnum, bnum, sizeof(short), mantime_cmp);

  xo->max = max;
  if (xo->pos >= max)
    xo->pos = xo->top = 0;

: board.c:class_browse()

  chp = (short *) xo->xyz + xo->pos;
  chn = *chp;
  if (chn < 0)          /* 進入分類 */
  {
+   short *chx;
+   char *img, *str;

+   img = class_img;
+   chx = (short *) img + (CH_END - chn);
+   str = img + *chx;

    // "HOT/" 名稱可自定,若改名也要順便改後面的長度 4 
+   if (!strncmp(str, "HOT/", 4))
+   {
+     class_hot = 1;
+     chn = CH_END;
+   }

    if (!XoClass(chn))
      return XO_NONE;

+   if (class_hot)
+     class_hot = 0;      /* 離開 HOT Class 再清除 class_hot 標記 */
  }

--
  Origin: luna.twbbs.org
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻