web-dev-qa-db-ja.com

ルールで日付フィールドを設定しますか?

ユーザーが入力できるフォームがあり、それが私のウェブサイトのコミュニティカレンダーに表示されるイベントノードを作成します。 「Webform:Webフォームが送信された後」イベント(Webformルールモジュールが必要)のときに、Rulesを使用して新しいノードを作成しています。

日付フィールドを除き、すべてがうまく機能しています。イベントノードには日付と時刻が必要ですが、それがカレンダーの要です。

_[data:date-value]_と_[data:time-value]_を使用してWebフォームデータを選択できます。通常のテキストフィールド(_[entity-created:body:value]_)に入力すると、日付と時刻が表示されるため、正しいデータが出力されます。大丈夫。また、必要に応じてPHPを使用できます。

_<?php 
  echo $data['components']['date']['value'][0] ;
?>
_

日付フィールドにどのデータセレクターを選択すればよいかわかりません。ルールが知っていることがいくつかありますが、今のところ私は運がありません:

  • _entity-created:field-date_
    • これを選択すると、結果のページに新しい値を設定するために、PHP使用できる評価または置換パターンはありません。データセレクターajaxドロップダウンのみがあり、これにより、 _[data:date-value]_。
    • 「_Data types: Select data of the type List<struct>._」と表示されている
  • _entity-created:field-date:0_-イベントノードの日付フィールドは1つしかありませんが、それらはすべて同じですが、0から3になります
    • これを選択すると、結果のページに新しい値を設定するために、PHP使用できる評価または置換パターンはありません。データセレクターajaxドロップダウンのみがあり、これにより、 _[data:date-value]_。
    • 「_Data types: Select data of the type Struct._」と表示されている
  • entity-created:field-date:0:value (Start Date)
    • 結果のページで新しい値を選択すると、「データタイプ:日付タイプのデータを選択します」と表示されます。正しい方向への一歩だと思います...
    • 今、私が使用できるプレーン値フィールドがあります(直接入力モード)、
      • 「GMTの日付。固定時刻(2016-06-04 16:01:07など)、またはPHP strtotime()で認識されるGMTの他の値を入力できます。 (リンクは外部)関数(「+1日」など)。「+ 1日」や「今」などの相対的な日付は評価時間に関係します。「+ 1日」をフィールドに入力し、送信してテストした場合Webフォームを使用すると、日付フィールドが1日先に設定されたノードが正しく作成されます。
    • データ選択モードに切り替えることができ、データセレクターPHP Evaluationがあり、オフセットを追加できます。
      • 新しい値を_[data:date-value]_または_[data:date-value] [data:time-value]_に設定した場合、エラーは表示されませんが、テストしてフォームを送信し、作成された新しいノードを確認すると、日付フィールドは設定されていません
      • 値を_<?php echo $data['components']['date']; ?>_に設定しようとしても、まだうまくいきません。また、エラーは表示または記録されません。
    • また、entity-created:field-date:0:value2 (End Date)entity-created:field-date:0:duration (Duration)を可能な限り「データ値を設定する」としてリストします。

誰もが私がここでやるべきことを何か知っていますか?ありがとうございました!

2
Dan Mantyla

Set a Data Valueアクションを使用して日付を設定することはできませんが(私の別の回答を参照)、カスタムPHP codeアクションを実行します。

これは私が使用しているコードです。

// set the date
$date = format_date(strtotime($data['components']['date']['value'][0] . ' ' . $data['components']['time']['value'][0]), 'custom', 'Y-m-d H:i:s', 'UTC'); // ISO format
$entity_created->field_date[LANGUAGE_NONE][0] = array(
    'value' => $date,
    'timezone' => 'UTC',  
    'timezone_db' => 'UTC',
  );

形式は非常に重要です。コンテンツタイプ(ISOまたはUnixタイムスタンプ)の日付フィールドに選択した「フィールドタイプ」によって制御される形式と完全に一致しない限り、機能しません。 ISOを持っています。形式の '\ T'の部分が欠けていて、それを理解しようと数週間頭を悩ませていました。 日付フィールドタイプ で少し説明します。

0
Dan Mantyla

Dan Mantyla氏のコメントによると、日付フィールドが日付(UNIXタイムスタンプ)または日付(ISO)フィールドではなく、通常の日付フィールドだけの場合、次のコードが機能します。

$thedate = $data['components']['date']['value'][0].' 00:00:00';

// set the date
$entity_created->field_date[LANGUAGE_NONE][0] = array(
    'value' => $thedate,
  );
1
pixelshrink

Webform を使用しているため、質問に答えるための「手掛かり」は、利用可能なWebフォームのすべてのフィールドのすべてのラベルとすべての値にアクセスできることです。

  • [data:MachineFieldName-title]には、マシン名MachineFieldNameのフィールドのLabelが含まれています。
  • [data:MachineFieldName-value]には、マシン名MachineFieldNameのフィールドのValueが含まれています。

詳細については、「 ルールを使用してWebフォームからノー​​ドを作成する方法 」に対する私の回答を参照してください。

上記は良いスタートですが、目標を達成するのに十分ではありません(質問のように、=「...データセレクターが日付フィールドに選択するもの」)。ただし、 my answer から " Rulesモジュールを使用するときに送信されたWebフォームデータとのデータ比較を行う方法は? "で説明されているものと同様の手法を使用できます。略して:

  • Add a variableに値が割り当てられた[data:date-value-raw](およびWebformコンポーネントのデータ型と等しいデータ型)を使用して、追加のルールアクションを追加します。ただし、2つの変数が必要なようです。1つは[data:date-value]に関連し、1つは[data:time-value]用です。
  • 後続のルールアクションでは、追加したこれらの変数の値を参照できます(それが手掛かりです!)。
0
Pierre.Vriens

不可能です

_entity-created:field-date:0:value_の値を設定するときに、データセレクターフィールドを使用してsite:current-dateを選択すると、新しいノードの日付フィールドに現在の日付と時刻を設定できます。

PHPを使用して同じ日付形式、つまり「金、2016年6月24日-14:10」をフィールドデータでエミュレートする場合-return format_date(strtotime($data['components']['date']['value'][0] . ' ' . $data['components']['time']['value'][0]));-印刷する同じ形式(dms()関数を使用して画面に出力しているのでわかります)ですが、新しいノードの日付フィールドは設定されません。機能しません:(

文字列を入力し、PHPを使用して、PHP Evaluationフィールドのように、Rules設定のEvaluationフィールドに次のように入力します-_return "Thu, 08/04/2016 - 02:02";_-itそれでもうまくいきません!:(

_return $value + 1000;_をPHP評価フィールドに入れ、データセレクターフィールドに_site:current-date_がまだある場合、新しいノードの日付フィールドを正しく設定します。予想どおり、現在の日付と時刻から数分後。

戻り値$value + strtotime($data['components']['date']['value'][0]);をPHP評価フィールドに入れ、_site:current-date_がまだデータセレクターフィールドにある場合、新しいノードの日付フィールドを設定しますが、IT期待どおりに日付/時刻を未来に設定しないでください!そのため、PHP評価フィールドは$ data変数にアクセスできず、おそらく何もないと結論付けることができますしかし、$ value変数

編集: https://www.drupal.org/node/1231418 -「php入力エバリュエーターとは異なり、phpデータプロセッサはまだ変数へのアクセスをサポートしていません。パッチへようこそ。」

0
Dan Mantyla