XOOPS:newsをカテゴリ別に表示する

長年・・でもないですが、探していたものが見つかりました。

要はnewsモジュールをカテゴリ別に分割して、カスタムブロック上に表示するためのスクリプトです。主な利用方法としては、特定のページに行くとそれに関連したニュースの一覧を表示できる、という感じです。

たぶんPHPコードに対応したブロックであれば、ある程度対応できるとは思いますが、確認はしてません。

テストしてみたところ、見事要望どおりの結果を得られましたので、うれしさのあまり紹介します(ぉ

引用元はdomifaraoopのbwikiからです。

なるべくスクリプトを簡素にするために、テーブルレイアウトになっていた部分を削除、タイトルを削除、その他コードの整理を行いました。

結果の出力はULとLI要素しかないので、Web標準化にも対応しやすいはずです。

変更すべき部位は赤字にしてありますので、もし必要な方がいれば使ってください。

もちろん、本家のほうを使用してもOKです。私のはここに載せたっきりサポートはしないと思いますので・・・

// カスタムブロック用トピックス別記事リスト表示スクリプト
// なるべくWeb標準に準拠できるように、テーブルレイアウト部分を除いています。
// スクリプト元:domifaraoop http://domifara.lolipop.jp/
$options = array() ;
$options[0] = ‘published’ ; // ソートする項目(降順=新しい順)published:公開日
$options[1] = 10 ; // リスト取得件数
$options[2] = 80 ; // タイトルの表示文字バイト数
$options[3] = 2 ; // 表示する特定トピックid 数字でだけ指定する(一つだけ)
$_cuctumModule_dirname = ‘news’ ; // モジュールディレクトリ名を変えている場合はそれに合わせて変更すること
$_cuctumModule_btemplatename = ‘db:’.’news_block_new.html’ ; // ベースとなるテンプレートを指定
$module_handler =& xoops_gethandler(‘module’);
$_custumModule =& $module_handler->getByDirname($_cuctumModule_dirname);
if (@is_object($_custumModule)) {
if ($_custumModule->getVar(‘isactive’)) {
// ブロック用の言語ファイルの読み込み
global $xoopsConfig;
if ( file_exists(XOOPS_ROOT_PATH.’/modules/’.$_cuctumModule_dirname.’/language/’.$xoopsConfig[‘language’].’/blocks.php’) ) {
include_once(XOOPS_ROOT_PATH.’/modules/’.$_cuctumModule_dirname.’/language/’.$xoopsConfig[‘language’].’/blocks.php’);
} else {
if ( file_exists(XOOPS_ROOT_PATH.’/modules/’.$_cuctumModule_dirname.’/language/english/blocks.php’) ){
include_once(XOOPS_ROOT_PATH.’/modules/’.$_cuctumModule_dirname.’/language/english/blocks.php’);
}
}
// ブロックの表示用関数
if (!function_exists(‘custum01_news11_top_show’)){
function custum01_news11_top_show($options) { // 複数作成する場合は関数名を重複しないよう変更すること
global $xoopsDB;
$myts =& MyTextSanitizer::getInstance();
$block = array();
$sql = "SELECT storyid, title, published, expired, counter";
$sql .= " FROM ".$xoopsDB->prefix("stories");
$sql .= " WHERE published < ".time()." AND published > 0 AND (expired = 0 OR expired > ".time().")" ;
$sql .= " AND topicid = ".$options[3];
$sql .= " 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 (strlen($title) > $options[2]) {
$title = xoops_substr($title,0,$options[2]+3);
}
$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;
}
}
// ブロック表示処理
$xoopsTpl = new XoopsTpl();
$bresult = custum01_news11_top_show($options); // 上記で貼り付けた関数名に変更すること
if (!empty($bresult)) {
global $xoopsDB;
include_once XOOPS_ROOT_PATH."/class/xoopstopic.php";
$_mytopics = new XoopsTopic($xoopsDB->prefix("topics"), $options[3]);
$topic_id = $_mytopics->topic_id();
$topic_title = $_mytopics->topic_title();
$topic_imgurl = $_mytopics->topic_imgurl();
// レイアウト部分
global $xoopsUser,$xoopsUserIsAdmin ;
if (is_object($xoopsUser)) {
$xoopsTpl->assign(array(‘xoops_isuser’ => true, ‘xoops_userid’ => $xoopsUser->getVar(‘uid’), ‘xoops_uname’ => $xoopsUser->getVar(‘uname’), ‘xoops_isadmin’ => $xoopsUserIsAdmin));
}
$xoopsTpl->assign(‘xoops_requesturi’, htmlspecialchars($GLOBALS[‘xoopsRequestUri’], ENT_QUOTES));
$xoopsTpl->assign_by_ref(‘block’, $bresult);
$xoopsTpl->display($_cuctumModule_btemplatename);
$xoopsTpl->clear_assign(‘block’);
}
}
}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中