3

だから、私は私のフォームにこの要素を持っています:

<?php
$form['order']['date'] = array(
        '#type'          => 'date',
        '#title'         => 'Order date',
      );

フォーム送信機能で、私はそのような配列を持っています:

[values] => Array
    (
        [date] => Array
            (
                [year] => 2010
                [month] => 11
                [day] => 27
            )
    )

この配列をデータベースに保存する簡単な方法を探しています。次に、データベースからこの日付を抽出して、編集フォームに戻すことができるようにしたいと考えています。

このためのdrupalapi関数はありますか?

4

7 に答える 7

2

Dateモジュールは、これを行うためのAPI呼び出しを提供すると思います。

私の場合、要件はかなり単純で、追加のモジュール依存関係を作成したくなかったので、以下を使用してPHPDateTimeオブジェクトを作成しました。

$date_arr = $form_state['values']['date'];
if ($date_arr['year'] && $date_arr['month'] && $date_arr['day']) {
  $date = new DateTime();
  $date->setDate($date_arr['year'], $date_arr['month'], $date_arr['day']);
} else {
  $date = NULL;
}

データベースに保存するために(Drupalの規則と同様にUNIXタイムスタンプとして)、$ date-> getTimestamp()を使用しました。

日付をフォームに戻す必要はありませんでしたが、元に戻す場合は、次のようなものを試してみます。

$query = db_query("select mydate from table");
while ($fields = db_fetch_array($query)) {
  $date = new DateTime();
  $date->setTimestamp($fields[0]);
  $form['order']['date'] = array(
    '#type'          => 'date',
    '#title'         => 'Order date',
    '#default_value' => array(
      year  => $date->format('Y'),
      month => $date->format('m'),
      day   => $date->format('d'),
    ),
  );
}

私はこれをテストしていないので、実験する必要があります。

お役に立てれば!

于 2011-01-18T00:31:58.100 に答える
1

シリアル化して、シリアル化された配列としてデータベースに保存することができます。次に、それを表示するときに、データベース列でunserializeを呼び出すと、元の配列が元に戻ります。

//in your submit function
$date = serialize($values['date']);
$sql = "UPDATE foobar SET date = '%s' WHERE id = '%d'";
db_query($sql, $date, $some_id);

//in your form function
$date_array = db_result(db_query("SELECT date FROM foo WHERE id = '%d'", $some_id));
$form['date'] = array(
  '#type' => 'date',
  '#title' => 'Order date',
  '#default_value' => $date_array,  
);
于 2010-11-27T20:56:08.493 に答える
0

まず第一に、それはあなたが日付をどのように保存する必要があるかに依存します。タイムスタンプまたは日付または日時またはいくつかのカスタム形式?

日付を日付文字列にするAPIはありませんが、日付モジュールを使用して日付フィールドを作成すると、日付モジュールはデータをデータベースが使用する通常のISO形式の日付文字列に変換します。

于 2010-11-27T21:20:26.723 に答える
0

私はあなたを正しい方向に向けることができます。

APIには、作業を行うための機能があります。日付は少し厄介で、ある程度の忍耐が必要になります。

フォーム参照APIのdate要素を見てください。おそらく、フォーマットを行うために使用できるフックがあります。

http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html/6

hook_elements()に精通している必要があります。フォームの送信時に実行される日付要素にコールバックを追加できる「#process」など、興味深い属性がいくつかあります。このフックは非常に過小評価されています。

http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_elements/6

プロファイルモジュールには例があります(ただし、見つけるのは困難です)。

http://api.drupal.org/api/drupal/modules--profile--profile.module/function/profile_form_profile/6

日付は主にタイムスタンプとしてデータベースに保存されます。これらはformat_dateで簡単に変換できます。

http://api.drupal.org/api/drupal/includes--common.inc/function/format_date/6

:)

于 2010-11-28T10:51:06.957 に答える
0

Drupalは、データベース内の日付配列に(un)serializeを使用します。これは、プロファイルフィールドであると想定しています。シリアル化を使用してデータベースに書き込む場合、Drupalはそれを使用できます。

于 2011-03-28T17:40:49.030 に答える
0

Drupalでの日付の保存に推奨される方法は、UNIX時間形式です。mktime関数などを使用して、フォームの日付をUNIX時間に変換することをお勧めします。

簡単な例を次に示します。

$my_date = mktime(23, 59, 59, $order->values['date']['month'], $order->values['date']['day'], $order->values['date']['year']);

次に、DBの挿入/更新で$my_date変数を使用します。

于 2011-11-03T18:17:14.703 に答える
-1

簡単な方法を見つけたと思いますが、DrupalAPIを使用していません。

$date = implode($form_state['values']['date']); // $date = 20101127;
于 2010-11-28T06:14:49.217 に答える