LOGIN ID Password Auto Login Register Now! Lost Password?
XUGJ Forum

xugj_date を作ろう

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/29 12:29
GIJOE  Admiral 居住地: 2003年4月くらい  投稿数: 3708
これまた、Smarty小ネタを書いていて思ったのですが、New! マークを表示するための修正子プラグイン ryus_date もさすがに古いですよね。

ryus_dateって、UNIXTIMESTAMPがアサインされず、フォーマット済の日付表現文字列だけがアサインされていた過去のモジュール用のためのいわば苦肉の策であり、最新のモジュールのように、ちゃんとTIMESTAMPもアサインしてくれるのであれば、そちらを使うのがベターでしょう。

ただ、そのTIMESTAMPも、ユーザとの時差計算が済んでいるかどうかはなかなか統一されていません。

というわけで、xugj_date 修正子プラグインを作ってみました。

- アサイン変数がUNIXTIMESTAMP形式でも、フォーマット済でもそれなりにちゃんと解釈する
- date_format修正子の代わりとしても使える
- 日付フォーマットは使いづらいstrftime()ではなくdate()形式
- New! という文字列も引数で変更可能
- ユーザ時差計算が済んでいるかどうかも、引数で切り替えられる(デフォルトは「済」)

class/smarty/plugins/ に modifier.xugj_date.php として作ってください
<?php
/**
 * Smarty plugin
 */

/**
 * Include the {@link shared.make_timestamp.php} plugin
 */
/**
 * Smarty xugj_date modifier plugin
 *
 * Type:     modifier
 * Name:     xugj_date
 * Purpose:  format datestamps via date()
 * Input:
 *         - string: input date string or integer
 *         - format: format of date() for output
 *         - new1_string: message for the latest timestamp
 *         - new2_string: message for the second latest timestamp
 *         - is_uzone: is the string offsetted for user's timezone
 * @link http://www.xugj.org/
 * @author   xugj members
 * @param string or integer
 * @param string (optional)
 * @param string (optional)
 * @param string (optional)
 * @param bool (optional)
 * @return string|void
 */
function smarty_modifier_xugj_date( $string , $format = 'Y-n-j' , $new1_string = 'New!' , $new2_string = 'New' , $is_uzone = true )
{
	if( is_numeric( $string) ) {
		// specified by UNIX TIMESTAMP
		$time = intval( $string ) ;
	} else {
		// specified by format
		$time = strtotime( $string ) ;
	}

	if( $time <= 0 ) {
		$time = time() ;
	}

	$utime = $is_uzone ? $time : xoops_getUserTimestamp( $time ) ;
	$unow = xoops_getUserTimestamp( time() ) ;

	$new_marks = '' ;
	if( $new1_string ) {
		if( $utime > $unow - 1 * 86400 ) {
			$new_marks = '<span class="new1">' . $new1_string . '</span>' ;
		} else if( $new2_string ) {
			if( $utime > $unow - 7 * 86400 ) {
				$new_marks = '<span class="new2">' . $new2_string . '</span>' ;
			}
		}
	}

	return date( $format , $utime ) . $new_marks ;
}
?>
投票数:17 平均点:9.41
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/29 12:30
GIJOE  Admiral 居住地: 2003年4月くらい  投稿数: 3708
使い方:

・'Y-n-j'形式の日付と一緒にNewマークを出したい
<{$news.date|xugj_date}>

・'n月j日'形式の日付と一緒にNewマークを出したい
<{$news.date|xugj_date:"n月j日"}>

・'n月j日'形式の日付だけが欲しく、Newマークは不要
<{$news.date|xugj_date:"n月j日":"":""}>

・'n月j日'形式の日付に、「最新」(24時間以内)「新着」(7日以内)というNEWマークをつけたい
<{$news.date|xugj_date:"n月j日":"最新":"新着"}>

・日付は不要。「新着」(24時間以内)だけが欲しい
<{$news.date|xugj_date:"":"新着":""}>

・UNIXTIMESTAMP形式で割り当てられている変数があるが、時差計算がされてない
<{$content.created_time|xugj_date:"n月j日 H時i分":"最新":"新着":false}>
投票数:19 平均点:9.47
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2007/2/2 4:01
GIJOE  Admiral 居住地: 2003年4月くらい  投稿数: 3708
ふと思ったこと。

このプラグインって、
「ザグジェイデイト」
と読むのかしらん?

「エックスユージージェイデイト」
じゃ舌噛みそう

名古屋の方言では、
 ・
「ングジェデイト」

なんか格好良いかも。
投票数:10 平均点:8.00
  条件検索へ

Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities