web-dev-qa-db-ja.com

ノード参照nidを持つ画像フィールドファイルパスのトークンの作成

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'];
}
6
Adam S

答えは Fieldfield Paths モジュールを使用することです。

FileField Pathsモジュールは、Drupalsコアアップロードモジュール、FileFieldモジュール、および他の多くのファイルアップロードモジュールのデフォルト機能を拡張し、nodeトークンを使用する機能を追加します宛先パスとファイル名。

1
Adam S