custom block
出典: wiki.nodoka.org
目次 |
カスタムブロックの作成
以下の方法でカスタムブロックを追加できる。
管理者ツール→互換モジュール→ブロックの管理→『カスタムブロック追加』ボタン
タイプを『PHPスクリプト』にすれば、PHPを用いて自由に編集できる。
以下のサンプル的なカスタムブロックをまとめておく。
WordPressMEのカスタムブロック
日付、タイトル、記事サマリーを一覧するブロックを作成する。
$db =& Database::getInstance();
$sql = "SELECT ID,DATE_FORMAT(post_date,'%Y/%m/%d') AS date,post_title AS itle,CONCAT(SUBSTRING(post_content,1,20),'...') AS content FROM x_wp_posts ORDER BY post_date DESC LIMIT 10";
$res = $db->query($sql);
echo "<ul>";
while (list($ID,$date,$title,$content) = $db->fetchRow($res)) {
echo "<li>$date <a href=/modules/wordpress/index.php?p=".$ID." target=_self>".$title."</a> $content</li>";
}
echo "</ul>";
|
piCalのカスタムブロック
日付、タイトル、イベントサマリー、場所を一覧するブロックを作成する。
ログインユーザーごとに閲覧権限のあるイベントを出し分けする。
global $xoopsUser;
$db =& Database::getInstance();
$sql="SELECT pe.id AS id,DATE_FORMAT(FROM_UNIXTIME(pe.start),'%m/%d %H:%i') AS date,DATE_FORMAT(FROM_UNIXTIME(pe.start),'%Y-%m-/%d') AS caldate,pe.summary,pe.location,pe.description AS description FROM x_pical_event pe WHERE FROM_UNIXTIME(pe.start)>=CURDATE() AND pe.class='PUBLIC' ORDER BY pe.start LIMIT 10";
if(is_object($xoopsUser)){
$uid =$xoopsUser->getVar('uid');
$sql="SELECT LPAD(gul.groupid,5,0) AS gid FROM x_groups_users_link gul WHERE gul.uid=".$uid;
$res=$db->query($sql);
while(list($gid)=$db->fetchRow($res)){
if(!empty($gids)){$gids=$gids.",";}
$gids=$gids.$gid;}
$sql="SELECT pe.id AS id,DATE_FORMAT(FROM_UNIXTIME(pe.start),'%m/%d %H:%i') AS date,DATE_FORMAT(FROM_UNIXTIME(pe.start),'%Y-%m-/%d') AS caldate,pe.summary,pe.location,pe.description AS description FROM x_pical_event pe WHERE FROM_UNIXTIME(pe.start)>=CURDATE() AND ( pe.class='PUBLIC' OR pe.class='PRIVATE' AND (pe.groupid IN (".$gids.") OR pe.uid=LPAD(".$uid.",8,0))) ORDER BY pe.start LIMIT 10";
}
$res=$db->query($sql);
echo "<ul>";
while (list($id,$date,$caldate,$summary,$location,$description) = $db->fetchRow($res)) {
$description=preg_replace("/(https?:\/\/[a-zA-Z0-9;\/?:@&=\+$,\-_\.!~*'\(\)%#]+)/","<a href=\"\\0\" target=\"_blank\">\\0</a>",$description);
echo "<li>$date <a href=/modules/piCal/?smode=Monthly&action=View&event_id=$id&caldate=$caldate target=_self>$summary</a>($location) $description</li>";
}
echo "</ul>";
|
scuttleのカスタムブロック
他のLAMPツールであるscuttleとの連携。
DBが同一サーバ上にあり、閲覧権限がある前提(DB名はscuttle)。
scuttle上で管理されている『favorite』とタグ付けされたブックマークを一覧する。
$db =& Database::getInstance();
$sql = "SELECT b.bTitle,b.bAddress FROM scuttle.sc_tags t,scuttle.sc_bookmarks b where t.bid=b.bid and t.tag='favorite' order by b.bTitle";
$res = $db->query($sql);
echo "<ul>";
while (list($name,$url) = $db->fetchRow($res)) {
echo "<li><a href=".$url." target=_blank>".$name."</a></li>";
}
echo "</ul>";
|
Tasks Jrのカスタムブロック
他のLAMPツールであるTasks Jrとの連携。
DBが同一サーバ上にあり、閲覧権限がある前提(DB名はtasksjr)。
Tasks Jr上で管理されているタスクを一覧する。
$db =& Database::getInstance();
$sql = "SELECT ID,DATE_FORMAT(date_due,'%Y/%m/%d') AS date,title AS title,CONCAT(LPAD(status,2,'0'),'%') AS status,priority,SUBSTRING(notes,1,20) AS notes FROM tasksjr.tasksjr WHERE parent!=0 AND priority>1 AND status<100 AND obsolete=0 ORDER BY date_due";
$res = $db->query($sql);
echo "<ul>";
while (list($ID,$date,$title,$status,$priority,$notes) = $db->fetchRow($res)) {
echo "<li>$date <b>$status $priority</b> <a href=http://task.domain.com/index.php?screen=edit&id=".$ID." target=_blank>".$title."</a> $notes</li>";
}
|
Tiny Tiny RSSのカスタムブロック
他のLAMPツールであるTiny Tiny RSSとの連携。
DBが同一サーバ上にあり、閲覧権限がある前提(DB名はttrss)。
Tiny Tiny RSS上で最近取得されたRSSを一覧する。
$db =& Database::getInstance();
$sql = "SELECT te.title, DATE_FORMAT(te.updated,'%m/%d %H:%i') reg_date, te.link, tf.title AS feed, tf.site_url AS site FROM ttrss.ttrss_entries te,ttrss.ttrss_user_entries tue,ttrss.ttrss_feeds tf WHERE tf.hidden = false AND tue.feed_id = tf.id AND tue.ref_id = te.id AND tue.owner_uid = '2' AND tue.unread = true AND te.updated > DATE_SUB(NOW(), INTERVAL 24 HOUR) ORDER BY tue.score DESC, te.updated DESC LIMIT 10";
$res = $db->query($sql);
echo "<ul>";
while (list($title,$date,$link,$feed,$site) = $db->fetchRow($res)) {
echo "<li>$date <a href=$link target=_blank>$title</a> (<a href=$site target=_blank>$feed</a>)</li>";
}
echo "</ul>";
|
WordPressのカスタムブロック
他のLAMPツールであるWordPressとの連携。
DBが同一サーバ上にあり、閲覧権限がある前提(DB名はwordpress)。
WordPress上で最近投稿された記事を一覧する。
※諸事情で記事の頭14文字を削っている。不要であればSUBSTRING()関数を外すように。
$db =& Database::getInstance();
$sql = "SELECT post_name AS name,DATE_FORMAT(post_date,'%Y/%m/%d') AS date,DATE_FORMAT(post_date,'%Y') AS year,DATE_FORMAT(post_date,'%m') AS month,post_title AS title,CONCAT(SUBSTRING(REPLACE(post_content,CONCAT(char(13),char(10)),''),14,20),'...') AS content FROM wordpress.wp_posts WHERE post_type='post' AND wp_posts.post_status='publish' ORDER BY post_date DESC LIMIT 10";
$res = $db->query($sql);
echo "<ul>";
while (list($name,$date,$year,$month,$title,$content) = $db->fetchRow($res)) {
echo "<li>$date <a href=http://blog.domain.com/".$year."/".$month."/".$name."/ target=_blank>".$title."</a> $content</li>";
}
echo "</ul>";
|
MediaWikiのカスタムブロック
他のLAMPツールであるMediaWikiとの連携。
DBが同一サーバ上にあり、閲覧権限がある前提(DB名はmediawiki)。
MediaWiki上で最近編集された記事を一覧する。
※MediaWikiのDBは日本語を扱う一部のテキスト・フィールドがバイナリ扱い。
そのままだと文字化けするので、以下のDDLで属性を変更した。
ALTER TABLE text MODIFY old_text LONGTEXT NOT NULL; ALTER TABLE page MODIFY page_title VARCHAR(255) NOT NULL;
$db =& Database::getInstance();
$sql = "SELECT DATE_FORMAT(r.rev_timestamp,'%Y/%m/%d') AS date,REPLACE(p.page_title,'_',' ') AS title,CONCAT(SUBSTR(REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING(old_text,INSTR(old_text,']]')),'==',''),'[[',''),']]',''),char(10),''),1,30),'...') AS text FROM mediawiki.page p,mediawiki.revision r,mediawiki.text t,mediawiki.categorylinks c WHERE p.page_latest=r.rev_id AND r.rev_text_id=t.old_id AND p.page_id=c.cl_from ORDER BY r.rev_timestamp DESC LIMIT 10
";
$res = $db->query($sql);
echo "<ul>";
while (list($date,$title,$text) = $db->fetchRow($res)) {
echo "<li>$date <a href=http://wiki.domain.com/index.php/".$title." target=_blank>".$title."</a> $text</li>";
}
echo "</ul>";
|