unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?  【解決済み】

質問全般・改善要望
返信する
アバター
min-o
メンバー
メンバー
記事: 318
登録日時: 2009年10月07日(水) 18:32

unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?  【解決済み】

投稿記事 by min-o »

こんにちは。
いつもお世話になっております。

以下を参考に
----
[解決]テンプレート変数で、カレンダーからUnixtimeを入力する方法
http://modxcms.com/forums/index.php?topic=32784.0
----
ウィジットUnixtimeのテンプレート変数dateを
Dittoのソートキーやフィルターに使ってみました。
これ自体はうまくいったのですが、単純に変数dateをグレゴリオ暦に変換してページに表示、というのでつまずきました。

DateTimeJPで可能と思ったのですが
DateTimeJPのtypeに使えるのは、「createdon」「pub_date」「editedon」だけなのですね。
Unixtimeにしてあっても、テンプレート変数を設定したら、エラーになってしまいました。

結局
[!Ditto? &documents=`[*id*]` &dateSource=`tvDateUnixtime` &dateFormat=`%Y年%m月%d日`!]
として、dittoを使って表示しましたが、
みなさんどうしてますか?

うまい方法があれば教えてください :D
--------------
[サーバ]
サーバ環境:サクラインターネット ビジネスプロ
ネットワーク:インターネット
Apache バージョン :Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
PHP Version 5.2.13
データベースのバージョン: 5.1.42

[modx]
modx 1.0.2J
Csv2Doc version 0.9.3b2

[クライアント]
Firefox3
---------------
---------
おのうちみん
http://scifitique.org/
http://gender-sf.org/
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?

投稿記事 by yama »

コード: 全て選択

return $modx->documentObject['テンプレート変数名'][1];
決め打ちでよければ、上記のような1行スニペットで出力できると思います。
(この場合は秒単位まで出力されちゃいますが・・)
li4ch
メンバー
メンバー
記事: 18
登録日時: 2009年10月09日(金) 14:41

Re: unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?

投稿記事 by li4ch »

[*tvDateUnixtime:date=`%Y年%m月%d日`*]
これでいけます。Phxプラグインの機能ですが、Dittoが入ってれば
いけたような気がします。

書き方は、phpのstrftimeと同じです。

って質問の回答になってますか?
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

Re: unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?

投稿記事 by kazuike »

私は、以下のような感じでDateTimeJPを拡張して使わせてもらってます。
#作者のZeRoさんに確認取ってないです > すみませんZeRoさん、許して!

テンプレート変数が使えるようにするついでに、
Unixtimeでも、文字列でも、だいたいどっちでも使えるようにしています。

コード: 全て選択

//<?php
/**
 * DateTimeJP
 * 
 * ドキュメント(テンプレート)に、ドキュメントの作成日、公開日、更新日を挿入
 *
 * @category 	snippet
 * @internal	@modx_category hikidas extend
 */

/**
* DateTimeJP
* Created by: w.ZeRo http://www.petit-power.com/
* Date: 2007.02.04
*/
// increase TemplateVar 2009-11-27 by ikeda
$date_type = isset($type) ? $type:"createdon";

//$timestamp = $modx->documentObject[$date_type];
$timestamp = $modx->getTemplateVar($date_type);	// ikeda
if (empty($timestamp))
{ $timestamp = $modx->documentObject['createdon'];
} else {
	$timestamp = $timestamp['value'];
	if (! is_numeric($timestamp)) {
		$timestamp = strtotime($timestamp);
	}
}
if(!isset($format))
{ $format = "%Y-%m-%d %H:%M:%S";
}
return strftime($format, $timestamp);
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
min-o
メンバー
メンバー
記事: 318
登録日時: 2009年10月07日(水) 18:32

Re: unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?

投稿記事 by min-o »

レスが遅くなってすいません。
いろいろやり方ありますね。

DateTimeJPはとても便利なので、今後の汎用性も考えて
kazuike さんの拡張版をつかわせていただきました。
ありがとうございます。 :D
---------
おのうちみん
http://scifitique.org/
http://gender-sf.org/
ZeRo
メンバー
メンバー
記事: 9
登録日時: 2009年7月30日(木) 22:31

Re: unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?

投稿記事 by ZeRo »

ひさびさに投稿だったりしますが・・・名前が出てたので顔出しついでにせっかく使ってくださっているようなので
Hikidasさんのとマージしちゃえ大作戦(ほんの20分)をやってみました。 ;)
ヘッダは適当ですが、要はtypeの変数にTV変数だったら"tv_XXX"って先頭にtv_を付ければtv_を除いた後ろの変数名をテンプレート変数名として利用し、そうでなければドキュメント変数名としてdocuumentObjectから値を取得します。
本当に動くかどうかは :?: :?:
テストしてなかったりしますが・・・、誰か試してくださいな。 :roll:

コード: 全て選択

//<?php
/**
* DateTimeJP
*
* ドキュメント(テンプレート)に、ドキュメントの作成日、公開日、更新日を挿入
*
* @category    snippet
* @internal   @modx_category hikidas extend  2009-11-27
*                                      merge doc and template ver  2010-07-22
*/

/**
* DateTimeJP
* Created by: w.ZeRo http://www.petit-power.com/
* Date: 2007.02.04
*/
// increase TemplateVar 2009-11-27 by ikeda
// merge document ver and template ver   2010-07-22 by ZeRo

$date_type = isset($type) ? $type:"createdon";

if (strncmp("tv_",$data_type,3)) {
    $date_type =substr($date_type,3);
    $timestamp = $modx->getTemplateVar($date_type);   // ikeda
} else {
    $timestamp = $modx->documentObject[$date_type];
}
if (empty($timestamp)) {
    $timestamp = $modx->documentObject['createdon'];
} else {
       $timestamp = $timestamp['value'];
}
if (! is_numeric($timestamp)) {
    $timestamp = strtotime($timestamp);
}
if(!isset($format)) {
    $format = "%Y-%m-%d %H:%M:%S";
}
return strftime($format, $timestamp);
え?
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

Re: unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?

投稿記事 by kazuike »

ZeRoさん
ありがとうございます。
同じく、テストしてないですが…
取り急ぎ、ツッコミだけ。 ;)

$timestamp = documentObject[$date_type];
のときも、
$timestamp['value'];
を取ろうとしちゃうような気がします。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
ZeRo
メンバー
メンバー
記事: 9
登録日時: 2009年7月30日(木) 22:31

Re: unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?

投稿記事 by ZeRo »

あっ :o

TV処理になっていたのを見逃してましたねぇ
ということで、修正してみました。

コード: 全て選択

//<?php
/**
* DateTimeJP
*
* ドキュメント(テンプレート)に、ドキュメントの作成日、公開日、更新日を挿入
*
* @category    snippet
* @internal   @modx_category hikidas extend  2009-11-27
*                                      merge doc and template ver  2010-07-23
*/

/**
* DateTimeJP
* Created by: w.ZeRo http://www.petit-power.com/
* Date: 2007.02.04
*/
// increase TemplateVar 2009-11-27 by ikeda
// merge document ver and template ver   2010-07-23 by ZeRo
//  
$date_type = isset($type) ? $type:"createdon";

if (strncmp("tv_",$data_type,3)) {
    $date_type =substr($date_type,3);
    $timestamp = $modx->getTemplateVar($date_type);   // ikeda
    if (is_array($timestamp))
	    $timestamp = $timestamp['value'];
} else {
    $timestamp = $modx->documentObject[$date_type];
}
if (empty($timestamp)) {
    $timestamp = $modx->documentObject['createdon'];
}
if (! is_numeric($timestamp)) {
    $timestamp = strtotime($timestamp);
}
if(!isset($format)) {
    $format = "%Y-%m-%d %H:%M:%S";
}
return strftime($format, $timestamp);
すっかり忘れてるって感じですね :roll:
え?
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?

投稿記事 by yama »

http://code.google.com/p/modx-ja/downloads/detail?name=datetime001.zip
DateTimeスニペットを新しく作りました。&typeというパラメータ名が分かりにくい気がしたので&src に変更してます。
(※いちおう今までどおり&typeも使えるようにしてあります)
日付データ型のリソース変数には全て対応しています。
日付データ型のテンプレート変数を指定する際に「tv」を付けなくてもいいようにしました。
ソースを見ると分かると思いますが、全体的に単純な処理に書き換えています。

http://code.google.com/p/modx-ja/downlo ... =youbi.zip
上記は類似スニペット。曜日を出力します。datetimeスニペットで曜日を正しく出力できない場合はこれを使ってください。

追記
http://modxcms.com/forums/index.php/top ... #msg340786
文字化け対応版を本家フォーラムに投稿しました。一部を書き換えることで曜日出力にも対応します。(Sunday→日曜など)
本家版にいつの間にか備わってたサーバオフセット考慮や&shiftパラメータにも対応しました。
&shiftパラメータは秒数指定で、&shift=60*60*24*3みたいな指定(3日)もできると思います
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: unixtimeウィジットのテンプレート変数dateをグレゴリオ暦変換、どうしてますか?

投稿記事 by yama »

http://code.google.com/p/modx-ja/downlo ... mat002.zip
新しく作ったものをこちらにアップしておきます
引数を柔軟に指定できるようにしたので、通販サイトなどで「2日後のxx曜日にお届けします」みたいな使い方もできます
返信する