3

フォーラムからdrupal7にノードをインポートしようとしています。一括ではなく、ニュース投稿を作成してフォーラムに参照できるように1つずつインポートします。キッカーは、私も画像の添付ファイルを持ってきたいということです...

これまでのところ、ここのコード例http://drupal.org/node/889058#comment-3709802を使用すると、ほとんどの場合機能します。ノードは作成されますが、画像は検証または処理されません。

添付された画像を、コンテンツタイプで定義されたルールに対して検証してほしい。特に、画像フィールドのサイズを600x600に変更する画像フィールドに関連付けられているスタイル。

そのため、独自のフォームを使用してプログラムでノードを作成するのではなく、hook_node_prepareを使用して「新しい」ノードを変更し、既存のフォームを使用して(渡されたURL引数に基づいて)新しいコンテンツを作成することにしました。これは非常にうまく機能し、作成フォームにはすべてのデータが事前に入力されて表示されます。画像も含めて!とてもかわいい。

次に、プレビューまたは保存を押すと、すべての検証とサイズ変更が画像に対して行われると予想しましたが、代わりにエラーが発生します。

"The file used in the Image field may not be referenced."

これは、私のファイルのfile_usageテーブルにエントリがないためです。* le sigh *

では、アップロードするファイルを手動で選択したときに発生するすべての優れた検証と処理をどのように行うことができますか?サイズ変更のように、file_usageテーブルのエントリ。

ajaxアップロード関数はそれを行いますが、これを行うために呼び出されるコードがAPIのどこにも見つかりません。

Drupalが呼び出していないファイルのアップロード/検証関数は何ですか?

Drupal 7のファイル/イメージAPIの経験があり、私を助けてくれる人はいますか?

4

1 に答える 1

1

使用状況のエントリを取得するには (つまり、ファイルを特定のモジュールにチェックアウトして、使用中にファイルが削除されないようにする)、Drupal 関数 'file_usage_add()' を検索します。

着信画像を検証するために、user.module からこの例を取得しました (PHP に慣れている場合は、いつでもコアを見て、「Drupal の方法」で何かがどのように行われるかを確認できます)。

function user_validate_picture(&$form, &$form_state) {
  // If required, validate the uploaded picture.
  $validators = array(
    'file_validate_is_image' => array(),
    'file_validate_image_resolution' => array(variable_get('user_picture_dimensions', '85x85')),
    'file_validate_size' => array(variable_get('user_picture_file_size', '30') * 1024),
  );

  // Save the file as a temporary file.
  $file = file_save_upload('picture_upload', $validators);
  if ($file === FALSE) {
    form_set_error('picture_upload', t("Failed to upload the picture image; the %directory directory doesn't exist or is not writable.", array('%directory' => variable_get('user_picture_path', 'pictures'))));
  }
  elseif ($file !== NULL) {
    $form_state['values']['picture_upload'] = $file;
  }
}

その関数は、次のように $form['#validate'] 配列に追加されます。

$form['#validate'][] = 'user_validate_picture'

于 2011-03-01T21:12:36.343 に答える