回精華區
作者itoc.bbs@processor.tfcis.org (核心動力) 看板: plan
標題Re: [問題] 如何自訂看板列表的分類排序?
時間動力核心 (2004/03/13 Sat 03:00:55) Updated: 2004/03/13
※ 引述《booloo (booloo)》之銘言:
> 如何自訂看板列表的分類排序?
>    355 ˇzechs        個人 ☆ Just Face The Music!               zechs
>   1083 ˇTF9019       班級 ★ 台南一中90級19班               phantom/Jeff
> 想要自訂排序,讓看板列表裡,"班級" 的分類在 "個人" 前面,要怎麼做呢?

: account.c:sequence_match() 新增在 brdtitle_cmp() 前面

static int              /* >0:傳回順序  0:找不到對應字串 */
sequence_match(class)
  char *class;
{
  int i;
  char *seq[] =         /* 指定優先順序分類 */
  {
    // 自定優先順序,排前面的比較優先 
    "站務", "學校", "社團", "個人", "娛樂", "電腦",
    NULL            /* 最後一項放 NULL */
  };

  for (i = 0; seq[i]; i++)
  {
    if (!strcmp(class, seq[i]))
      return i + 1;
  }

  return 0;
}

: account.c:brdtitle_cmp() 改成這樣

static int
brdtitle_cmp(i, j)              /* itoc.010413: 依看板中文敘述排序 */
  short *i, *j;
{
  int iSeq, jSeq;

  iSeq = sequence_match(bhead[*i].class);
  jSeq = sequence_match(bhead[*j].class);

  if (!iSeq && !jSeq)
  {
    /* 都不是「指定優先順序分類」就分類/板名交叉比對 */
    iSeq = strcmp(bhead[*i].class, bhead[*j].class);
    return iSeq ? iSeq : str_cmp(bhead[*i].brdname, bhead[*j].brdname);
  }
  else if (!iSeq)
  {
    /* 非「指定優先順序分類」排序一定在後 */
    return 1;
  }
  else if (!jSeq)
  {
    /* 是「指定優先順序分類」排序一定在前 */
    return -1;
  }
  else
  {
    /* 都是「指定優先順序分類」,先比對順序,再比對板名 */
    return iSeq != jSeq ? iSeq - jSeq :
      str_cmp(bhead[*i].brdname, bhead[*j].brdname);
  }
}

--
  Origin:  Maple-itoc˙動力核心  processor.tfcis.org 
  Modify: 2004/03/13 Sat 03:00:55
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻