ユーザーが入力できるフォームがあり、それが私のウェブサイトのコミュニティカレンダーに表示されるイベントノードを作成します。 「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
_ [data:date-value]
_。Data types: Select data of the type List<struct>.
_」と表示されているentity-created:field-date:0
_-イベントノードの日付フィールドは1つしかありませんが、それらはすべて同じですが、0から3になります[data:date-value]
_。Data types: Select data of the type Struct.
_」と表示されているentity-created:field-date:0:value (Start Date)
[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)
を可能な限り「データ値を設定する」としてリストします。誰もが私がここでやるべきことを何か知っていますか?ありがとうございました!
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'の部分が欠けていて、それを理解しようと数週間頭を悩ませていました。 日付フィールドタイプ で少し説明します。
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,
);
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]
用です。不可能です
_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データプロセッサはまだ変数へのアクセスをサポートしていません。パッチへようこそ。」