Drupal 7トークンのフィールドはサポートされていないため、画像フィールドファイルパスのトークンを置き換えるコードを作成するにはどうすればよいですか?
[〜#〜] edit [〜#〜]:まず、これはNode参照URLウィジェットを使用するため、参照されたノードのNIDがフォームにロードされます参照されたノードでリンクがクリックされた限り、配列。
Token_replace()が呼び出されるまでにノードに関する情報がないため、トークンモジュールに渡す情報をロードするためのコンテキストがないことに気づきました。これは、参照されるノードのNIDがフォームに追加される前です。
hook_form_FORM_ID_form_alter()
を使用してファイルパスを追加することはできますが、安全ではありません。ユーザーはNode参照URLウィジェットを使用してページにアクセスしない場合があります。その場合、ノードは参照と共に保存されますが、画像パスはNIDについて知るためのどの時点でもアクセスできませんでした。そして、ノードが編集された場合、参照されたノードが場所を台無しにしていることを知っているので、ノードが作成時にパスを変更します。
安全ではない単純なコードを次に示します。私はより良い解決策を気にしません。
更新:
参照されたノードのURLがURLにない場合、ノード参照URLウィジェットを設定して、見つからないページを返すことができることがわかります。これにより、ユーザーはノードを作成することしかできなくなるため、この関数は少し安全になります。参照先のページでノード作成リンクをクリックした場合。
/**
* Implements hook_form_FORM_ID_form_alter\
*/
function HOOK_form_photo_node_form_alter(&$form, &$form_state) {
$lang = $form['language']['#value'];
$form['field_business_photo'][$lang][0]['#upload_location'] = 'public://photo/' . $form['field_reference_business'][$lang][0]['nid']['#default_value'];
}
答えは Fieldfield Paths モジュールを使用することです。
FileField Pathsモジュールは、Drupalsコアアップロードモジュール、FileFieldモジュール、および他の多くのファイルアップロードモジュールのデフォルト機能を拡張し、nodeトークンを使用する機能を追加します宛先パスとファイル名。