2011-06-30 12 views
5

動的なPHPの日付形式を作成したいと思います。例:ノードが今日公開されている場合はノードの時刻を表示し、今日より古い場合は唯一の日/月を表示します。 Drupalの他の定義済みの日付フォーマット(テーマレベルだけでなく)のように、このフォーマットをDrupal全体で利用できるようにしたいと思います。カスタム日付形式(PHPロジックを使用したコールバック)

hook_date_format_typesの(D7のみ)フックが見つかりましたが、このPHPロジックを定義できるコールバックは許可されていないようです。

どのフックがこれを可能にするか知っていますか?またはこれを行うモジュールですか?

+0

希望の出力。 これはビューの日付フィールドではなく、ノードの作成時刻を使用しているだけで、ノードテンプレートファイルを使用して日付をフォーマットできます。 私は興味深い考えですが、私は確かにいくつかのアプリケーションを見ることができます。 –

+0

ええ、私はテンプレート/前処理レベルでこれを達成することができますが、ずっときれいもしあなたが実際のグローバルなカスタム日付フォーマットを作ることができたら... –

答えて

1

Drupal6では、format_date()にはハードコードされた日付と時刻があります。また、format_date()はコールバックを許可しませんが、カスタム文字列を許可します。ここでトリックを適用することができます。そこに文字列をハードコーディングする代わりに、文字列を返す関数を呼び出します。

function mydate_format($timestamp) { 
    $now = time(); 
    if (($now - $timestamp) < (60*60*24)) { 
    return "H:i"; 
    } 
    else { 
    return "d:m:Y"; 
    } 
} 

print format_date($timestamp, 'custom', mydate_format($timestamp)); 

第2の選択肢は、日付タイムスタンプを再定義することですが、これはハッキリしており、制限されています。日付形式はvariable_get()で定義されていますが、はタイムスタンプをに渡しません。タイムスタンプの値に基づいてフォーマットを切り替える例は、このようにはできません。

のsettings.php で:

$conf['date_format_long'] = $conf['debug'] ? 'r' : 'l, F j, Y - H:i'; 

これはあなたのsettings.phpがTRUEかに設定されたフラグ「デバッグ」を持っているかどうかに基づいて、別の値から切り替わります。言及したように:あなたは何も文脈を得ることができないので、これのための使用は限られています。

第3の代替案は、onlinle構成可能な時間フォーマットを提供するDate APIを使用することです。しかし、それは不器用で不安定です(データベースに実行可能なPHPを入力する)。また、非常に大きなモジュールセットにも依存します。最初の解決策と同じ欠点があります:format_dateは使用できませんが、format_date()ではなく、変更された関数呼び出しを使用する必要があります。すべてのオプションはThe Drupal.org date themeing handbookを参照してください。

GOTCHAいずれの場合でも、Drupalはキャッシュされたコンテンツに対してこの機能を呼び出しません。日付を本当に動的にしたい場合は、alltogetherをキャッシュしないようにするか、クライアントサイドのjavascriptで日付形式を実装する必要があります。

TL; DR:テーマレベルでコードの一部を変更せずに動的な日付形式を使用することはできません。コールバック関数を使用して「カスタム」日付形式を生成するのが最も簡単で実用的なソリューションです。

0

Date APIモジュールを使用して、カスタム日付書式を追加できます。 Date APIモジュールはDateモジュール内にあります。 Date APIモジュールを有効にしたら、"admin/settings/date-time/formats/add"のパスを使用してカスタムフォーマットを追加できます。

「admin/settings/date-time/formats/configure」は、日付形式を設定するためのパスです。

これを見てください。ハッピーコーディング。

おかげ RT

+0

私は日付APIモジュールを知っていますが、これは私が探しているものではありません。質問を読んでください:いくつかのPHPロジックでコールバックを使用するフォーマットを追加します。 PHPのdate()構文を使用した単純な形式ではありません。 –

0

あなたは(サイト/すべて/テーマ/ THEME_NAME/node.tpl.phpでおそらく)node.tpl.phpに行くことができます。ここでは、$作成された変数を見つけることができます、あなたはあなたのカスタム関数を使用することができます作成​​した$を変更することができます日付を再フォーマットする。これはすべてのノードはあなたの書式設定された日付を使用します。

Regatds、 Chintan。

+0

私はこれを認識していますが、これはまだ私が求めているものではありません。私はdrupal全体で使用できる動的なPHPカスタムフォーマットを作成したいと思います。あなたのソリューションはテンプレートレベルで、特定のtpl内にのみ存在します。 –

+0

ねえ!あなたはあなたの質問を変更しなければなりません、そのビットは混乱します。サイトワイドノードの日付形式を変更することを求めている場合は、太字部分を混乱させて見てください。 – Chintan

+0

ありがとう、私は少しそれを変更しました。今はっきりしていることを願っています。 –

0

フィーチャーモジュールを使用します。機能を作成します。

結果フィーチャモジュールの[feature] .moduleファイルでhook_nodeapi関数を作成し、日付の表示方法と現在の日付()を考慮した条件文でフィールドの書式を設定します$ node-> content varにコピーします。

そして、それはロックスターがそれを行うだろう方法(ある - ;ビューでのフィールドとしてこの日付を表示している場合は、あなたがあなたを取得するために必要なPHPのロジックを処理するために、ビューのフィールドテンプレートファイルを使用することができ

+0

私は違います – stefgosselin

関連する問題