XUGJ_blockを使って、Weblinks登録リンクから Myブックマークを作成してみました。
それならXUGJ_blockを使って、自分でphpソースを編集して作るしかないと考えたワケです。
しかし、picoも使い始めて間もないし、XUGJ_blockを使うのも始めてです。 ここに書いた方法は、Weblinksオリジナルの「weblinks_top.php」を改造した冗長すぎるロジックで、 「とりあえずやってみました」 と という稚拙なレベルに過ぎませんが、、どうぞご勘弁を。 もし、もっと簡単・スマートな方法などありましたら、ぜひご教示下さい。
これで、picoの「本文フィルター」 の 「Smarty(Xoops Tpl)」 にチェックを入れて保存すると、 例えば次のようの表示されます。
xugj_blockプラグインの活用法(Wander Wonder xFiled)
1、目的・概要
ココログからMT形式データでd3blogにインポートしたブログに、 良くあるブログのサイドメニューのような 「Myブックマーク」を付けたかったのだけれど、 Weblinksへ登録されたリンクデータから「category」抽出するブロックが見あたらず、ネット検索でも出て来ませんでした。それならXUGJ_blockを使って、自分でphpソースを編集して作るしかないと考えたワケです。
しかし、picoも使い始めて間もないし、XUGJ_blockを使うのも始めてです。 ここに書いた方法は、Weblinksオリジナルの「weblinks_top.php」を改造した冗長すぎるロジックで、 「とりあえずやってみました」 と という稚拙なレベルに過ぎませんが、、どうぞご勘弁を。 もし、もっと簡単・スマートな方法などありましたら、ぜひご教示下さい。
2、ソースコード
weblinks_top2.php
以下のコードを、「/xoops_url/modules/weblinks/blocks/weblinks_top2.php」 として保存します。 ファイル名と関数名をオリジナルのものから変更した理由は、モジュールアップデートの際などにおいても上書きされる危険性を避けること等です。
2008/7/17修正版:リンク取得sql文の変更
<?php // $Id: weblinks_top2.php,v 1.4 2008-06-28 naao Exp $ // 2008-06-28 naao // for XUGJ_BLOCK , added $option1[7] : catergory id // 2005-05-20 K.OHWADA // unlimited when $options[2] = 0 // 2005-01-20 K.OHWADA // add $options 3:new days 4:popular 5:max width 6:default width // add $url, $votes, $comments // 2004-12-05 K.OHWADA // write fair, delete unnecessary comments // 2004-10-20 K.OHWADA // newred.gif -> new.gif // add update_image // 2004/08/10 K.OHWADA // enable to install this module two or more. // not use class weblinksLink // add block rating // add new mark, popular mark // *************************************************************************** // * Function: b_weblinks_top_show // * Input : $options[0] = date for the most recent links // * hits for the most popular links // * $block['content'] = The optional above content // * $options[1] = How many reviews are displayes // * Output : Returns the desired most recent or most popular links // *************************************************************************** //========================================================= // block top // use class weblinksLink // 2004/01/14 K.OHWADA //========================================================= //--------------------------------------------------------- // $options // [0] order (time_update/hits/rating) // [1] number of display links (10) // [2] max length of title (30) // when 0, unlimited // [3] days to show new icon (7) // [4] hits to show popular icon (0) // [5] max width of banner image (50) // when 0, not show // [6] default width of banner image (50) // when 0, use original size // [7] category id (0) //--------------------------------------------------------- // --- change function name --- function b_weblinks_top_show2($options) { global $xoopsDB; // --- change function name --- $MODULE_DIRNAME = 'weblinks'; $weblinks_url = XOOPS_URL."/modules/".$MODULE_DIRNAME; $table_link = $xoopsDB->prefix("{$MODULE_DIRNAME}_link"); $tbl_category = $xoopsDB->prefix("{$MODULE_DIRNAME}_category"); $tbl_catlink = $xoopsDB->prefix("{$MODULE_DIRNAME}_catlink"); $myts =& MyTextSanitizer::getInstance(); $block = array(); $block['module_url'] = $weblinks_url; $block['lang_hits'] = _MB_WEBLINKS_HITS; $block['lang_rating'] = _MB_WEBLINKS_RATING; $block['lang_votes'] = _MB_WEBLINKS_VOTES; $block['lang_comments'] = _MB_WEBLINKS_COMMENTS; $order = $options[0]; $limit = $options[1]; $max_title = $options[2]; $newdays = $options[3]; $popular = $options[4]; $max_width = $options[5]; $width_default = $options[6]; $cid = empty( $options[7] ) ? 0 : $options[7] ; // cidのタイトル $sql = "SELECT title FROM $tbl_category WHERE cid = $cid"; $re = $xoopsDB->query($sql); $category_row = $xoopsDB->fetchArray($re); $cname = $category_row[title]; $block['cname'] = $cname; $block['cid'] = $cid; // DBからcidの合致するlid読み込み $sql = "SELECT * FROM $tbl_catlink WHERE cid = $cid"; $result_cats = $xoopsDB->query($sql); while( $row_cat = $xoopsDB->fetchArray($result_cats) ) { $cat_lids[] = $row_cat['lid']; } $cat_lids = array_map( 'intval' , $cat_lids ) ; $whr_lids= empty( $cat_lids ) ? '1' : 'lid IN ('.implode(',',$cat_lids).')' ; $sql = "SELECT * FROM $table_link WHERE $whr_lids ORDER BY $order DESC"; $result = $xoopsDB->query($sql, $limit, 0); $count = 0; while( $row = $xoopsDB->fetchArray($result) ) { $link = array(); $show_banner = 0; $show_new = 0; $show_update = 0; $show_popular = 0; $lid = $row['lid']; $title = $row['title']; $url = $row['url']; $banner = $row['banner']; $width = $row['width']; $height = $row['height']; $hits = $row['hits']; $rating = $row['rating']; $votes = $row['votes']; $comments = $row['comments']; $time_create = $row['time_create']; $time_update = $row['time_update']; $description = $row['description']; // unlimited when $options[2] = 0 if ( ($max_title > 0) && (strlen( $title ) > $max_title) ) { $title = strip_tags( $title ); // for multibyte environment if (function_exists('mb_strimwidth')) { $title = mb_strimwidth( $title, 0, $max_title, " ..." ); } else { $title = substr( $title, 0, $max_title )." ..."; } } // banner image if ( ($max_width > 0) && $banner ) { $show_banner = 1; if ($width > $max_width) { $width = $max_width; } if (($width == 0) && ($width_default > 0)) { $width = $width_default; } } // new & update image if ( $newdays > 0) { $startdate = (time()-(86400 * $newdays)); if ( $startdate < $time_create ) { $show_new = 1; } elseif ( $startdate < $time_update ) { $show_update = 1; } } // popular image if ($popular > 0) { if ( $row['hits'] >= $popular ) { $show_popular = 1; } } $link['show_banner'] = $show_banner; $link['show_new'] = $show_new; $link['show_update'] = $show_update; $link['show_pop'] = $show_popular; $link['width'] = $width; $link['id'] = $lid; $link['hits'] = $hits; $link['votes'] = $votes; $link['comments'] = $comments; $link['url'] = htmlspecialchars($url, ENT_QUOTES); $link['banner'] = htmlspecialchars($banner, ENT_QUOTES); $link['date'] = formatTimestamp($time_update,'s'); $link['rates'] = sprintf("%.1f",$rating); $link['title'] = $myts->makeTboxData4Show( $title ); $link['description'] = $description; // old style if ($order == "rating") { $link['hits'] = $link['rates']; } $block['links'][] = $link; } return $block; } ?>
3、表示用picoコンテンツ
- まず、xugj_blockを呼び、phpソースファイルと関数・引数を宣言して指定することで、Template変数にアサインします。
下記タグの引数指定:opt=の、最後の「2」は、抽出するカテゴリ番号です。 ここで指定したカテゴリのデータが抽出されます。
<{xugj_block file="modules/weblinks/blocks/weblinks_top2.php" func="b_weblinks_top_show2" opt="hits,20,50,20,0,50,50,2" item="block"}>
なお、引数を念のため解説しておきますと・・
// [0] order (time_update/hits/rating) : 表示優先順位: 更新順/ヒット数順/評価値順
// [1] number of display links (10) : 表示するリンク数。
// [2] max length of title (30) : タイトルの最大文字数。「0」なら無制限
// [3] days to show new icon (7) : 「New」アイコンの表示日数
// [4] hits to show popular icon (0) : 「Popular」アイコンを表示すすヒット数
// [5] max width of banner image (50) : バナーイメージ最大幅。 「0」なら非表示
// [6] default width of banner image (50) : バナーイメージ標準幅。 「0」なら元サイズ表示
// [7] category id (0) : 抽出するカテゴリ番号 ←今回追加したOption
- 続いて、アサインされた変数を参照して表示する部分のタグを、次のように書きます。
本文もTemplate変数に載せましたので、 表示部で下記のように書くと、「title」属性でマウスを近づけると本文概要が表示されます。これだけでは1つのカテゴリ分しか表示されませんが、 上記2つのセットを必要数並べれば、カテゴリ毎に仕分けされたブックマークリストになります。
(080630:リンクのクリックで、WeblinksのHit数カウントされるように修正しました。)
<H3>*<a href="<{$xoops_url}>/modules/weblinks/viewcat.php?cid=<{$block.cid}>"><{$block.cname}></a>*</H3> <{foreach item=entry from=$block.links}> <a href="<{$xoops_url}>/modules/weblinks/visit.php?lid=<{$entry.id}>" title="<{$entry.description}>" target="_blank"><{$entry.title}></a><br /> <{/foreach}>
これで、picoの「本文フィルター」 の 「Smarty(Xoops Tpl)」 にチェックを入れて保存すると、 例えば次のようの表示されます。
4、ブロックへの表示
この後は、picoのブロックでこのコンテンツを指定して好きな場所に表示したり、 picoの他のページにタグを貼ったりして、ご自由にどうぞ。5、XUGJ_block参考サイト
xugj_blockプラグインの活用法(Wander Wonder xFiled)
投票数:103
平均点:5.24
d3pipes用piCalプラグインでRSS記事をカレンダー表示 |
XOOPSサイト構築 |
XC2.0のサイトで携帯対応(携帯対応レンダー) |
コメント一覧
なーお
投稿日時 2008/7/17 6:32 | 最終変更
カテゴリリンク取得sql文を修正することでforループが無くなり、まともな速度になりました。
日々、勉強です。
あとは、複数テーブルからの条件抽出sql文発行の勉強をすれば、もっとまともなものに、なるのかなあ。。できそうな、できなそうな。。