3
News 1.2 beta has a block to diplay news per topic. I've send Mithrandir some code to put the option in the old blocks so 1 or more topics can be selected for each block. It uses a multi-select form. Little problem I couldn't figure out how to solve is: it gives each topic the name ARRAY. But that figures, I'm not a coder

. It works anyway.
If you don't mind hacking you news module a little, here is the code: (place this in modules/news/news_top.php, replace all.)
le="color: #000000"><?php function b_news_top_show($options) { global $xoopsDB; $myts =& MyTextSanitizer::getInstance(); $block = array(); $options_new = array_slice ( $options, 3 ); $topicpick = '('.implode ( ',', $options_new ).')'; if ( $options[3] == 0 ) { $sql = "SELECT storyid, title, published, expired, counter FROM ".$xoopsDB->prefix("stories")." WHERE published < ".time()." AND published > 0 AND (expired = 0 OR expired > ".time().") ORDER BY ".$options[0]." DESC"; } else { $sql = "SELECT storyid, title, published, expired, counter FROM ".$xoopsDB->prefix("stories")." WHERE published < ".time()." AND published > 0 AND (expired = 0 OR expired > ".time().") AND topicid in ".$topicpick." ORDER BY ".$options[0]." DESC"; } $result = $xoopsDB->query($sql,$options[1],0); while ( $myrow = $xoopsDB->fetchArray($result) ) { $news = array(); $title = $myts->makeTboxData4Show($myrow["title"]); if ( !XOOPS_USE_MULTIBYTES ) { if (strlen($myrow['title']) >= $options[2]) { $title = $myts->makeTboxData4Show(substr($myrow['title'],0,($options[2] -1)))."..."; } } $news['title'] = $title; $news['id'] = $myrow['storyid']; if ( $options[0] == "published" ) { $news['date'] = formatTimestamp($myrow['published'],"s"); } elseif ( $options[0] == "counter" ) { $news['hits'] = $myrow['counter']; } $block['stories'][] = $news; } return $block; } function b_news_top_edit($options) { global $xoopsDB; $form = ""._MB_NEWS_ORDER." <select name='options[]'>"; $form .= "<option value='published'"; if ( $options[0] == "published" ) { $form .= " selected='selected'"; } $form .= ">"._MB_NEWS_DATE."</option>n"; $form .= "<option value='counter'"; if($options[0] == "counter"){ $form .= " selected='selected'"; } $form .= ">"._MB_NEWS_HITS."</option>n"; $form .= "</select>n"; $form .= " "._MB_NEWS_DISP." <input type='text' name='options[]' value='".$options[1]."' /> "._MB_NEWS_ARTCLS.""; $form .= " <br>"._MB_NEWS_CHARS." <input type='text' name='options[]' value='".$options[2]."' /> "._MB_NEWS_LENGTH.""; $form .= "<br /><br />test<br /><select id='options[]' name='options[]' multiple='multiple'>"; include_once XOOPS_ROOT_PATH."/class/xoopsstory.php"; $xt = new XoopsTopic($xoopsDB->prefix("topics")); $alltopics = $xt->getTopicsList(); $alltopics[0] = "All topics"; ksort($alltopics); $size = count($options); foreach ($alltopics as $topicid => $topic) { $sel = ""; for ( $i = 2; $i < $size; $i++ ) { if ($options[$i] == $topicid) { $sel = " selected='selected'"; } } $form .= "<option value='$topicid'$sel>$topic</option>"; } $form .= "</select>"; return $form; }
If you want to be certain everything works flawless, wait for the release of the new news module or use the Topics Block Module. But as far as I know you can only select 1 topic with that module. If that's enough, no need to use this code