geeklog いぢり (5)

カスタマイズと hack なそれを以下に控えておく。

記事の一覧

まず、ナビゲーションなリンクに異なる話題な記事へのリンクが必要みたい、という事で直接呼び出すのか、と URL を調べてみると

directory.php?topic=_話題ID_&year=_今年_&month=_今月_

なページに jump できれば良さげ。system/cuscom/custom_menuentries.php でカスタムメニューなソレにしてるんで、 CUSTOM_menuEntries() ん中で当年当月を取って渡してあげれば済みそげ。

あるいは記事の一覧を見るに日付の昇順になっている模様。新着から見たいだろ、と言いつつ SQL を修正。directory.php の DIR_displayMonth() 手続きの SQL を組み立てている部分を以下のように修正。

   $sql = "SELECT sid,title,UNIX_TIMESTAMP(date) AS
day,DATE_FORMAT(date, '%e') AS mday FROM {$_TABLES['stories']} WHERE
(date >= '$start') AND (date <= '$end') AND (draft_flag = 0) AND (date
<= NOW())";
   if ($topic != 'all') {
       $sql .= " AND (tid = '$topic')";
   }
   $sql .= COM_getTopicSql ('AND') . COM_getPermSql ('AND')
//         . COM_getLangSQL ('sid', 'AND') . " ORDER BY date ASC";
      . COM_getLangSQL ('sid', 'AND') . " ORDER BY date DESC";

   $result = DB_query ($sql);
(以下略)

なんて easy な。(を

「話題」という部分についてデータの持ち方の調整が必要か。

セレクトボックスの表示

記事のコンテンツは画面右側にセレクトボックスが出てて、ajax なナニで話題の切り替えができる模様。とりあえず、切り替えとかできなくても良いんだがなぁ、と言いつつ DIR_displayMonth() 手続きを見るに $main という引数で調整している模様。以下。

   if ($main) {
       $retval .= '<div><h1 style="display:inline">';
       $retval .= $wk;
       $retval .= '</h1> ' . DIR_topicList ($topic, $year, $month) .
'</div>' . LB;
   } else {
       $retval .= '<h1>';
       $retval .= $wk;
       $retval .= '</h1>' . LB;
   }

$main が false で呼ばれればハッピーですかそうですか。ちなみに display.php は、いっちゃんケツに主処理が書いてあるようで年月なソレを元に以下のような切り替えをしている模様。

if (($year != 0) && ($month != 0)) {
   //@@@@@20060419upadate ---->
   //$title = sprintf ($LANG_DIR['title_month_year'],
   //                  $LANG30[$month + 12], $year);
   $title = sprintf ($LANG_DIR['title_month_year'],
                       $year,  $month);
   //@@@@@20060419upadate <----
   $display .= COM_siteHeader ('menu', $title);
   $display .= DIR_displayMonth ($topic, $year, $month, true);
   $display .= DIR_navBar ($topic, $year, $month);
} else if ($year != 0) {
   $title = sprintf ($LANG_DIR['title_year'], $year);
   $display .= COM_siteHeader ('menu', $title);
   $display .= DIR_displayYear ($topic, $year, true);
   $display .= DIR_navBar ($topic, $year);
} else {
   $display .= COM_siteHeader ('menu', $LANG_DIR['title']);
   $display .= DIR_displayAll ($topic, $conf_list_current_month);
}

最初のブロックで、以下なカンジで大丈夫かね。

   $display .= DIR_displayMonth ($topic, $year, $month, false);

すんごい無理矢理だな。

これで

  • 年月でシバッて記事を表示する際にはセレクトボックスは使わん
  • 年月シバリな記事一覧では、日付降順 (つまり新着順) で出力

という要求は満たすのかなぁ。

追記

ってこの程度で hack って片腹イタい。