1

ノードに関連付けられたサムネイル画像を保存しようとするまで、ノードに一部のデータを保存する同期関数を作成しようとしています。これは正常に機能します。

ファイルをダウンロードしてsites/default / filesフォルダーに配置しましたが、Drupalに「このファイルをそのCCKイメージフィールドに配置する」ように指示する最良の方法は何ですか?

編集少し明確にするために..サムネイルを個別に同期します(1つの画像を複数のノードで使用できるため)...最初のサムネイル同期でファイルを正しいフォルダー(一時的なフォルダーではない)に保存し、ポイントするだけですこのファイルへのimagefield...それはfield_file_save_file()で私を悩ませるものです、それは単にポインタを作る代わりに新しいファイルを保存します..何かアドバイスはありますか?

4

4 に答える 4

5

このコードはそれを行います:

$imagefile = '/temp/somefile.jpg';
// Load up the CCK field  
$field = content_fields('field_image', 'mycontenttype');
// Load up the appropriate validators
$validators = array_merge(filefield_widget_upload_validators($field), imagefield_widget_upload_validators($field));
// Where do we store the files?
$files_path = filefield_widget_file_path($field);
// Create the file object, replace existing file with new file as source and dest are the same
$file = field_file_save_file($imagefile, $validators, $files_path, FILE_EXISTS_REPLACE);


$node = node_load($mynode);
$node->field_image[] = $file;
$node = node_submit($node);
node_save($node);
于 2010-06-04T10:47:26.630 に答える
5

を使用field_file_save_file();して、ファイルを一時ディレクトリから目的の場所に移動し、CCK フィールドとして保存するオブジェクトを作成できます。

参照: http://api.lullabot.com/field_file_save_file

次に、次のように返された値を使用してフィールドを保存できます。

$node->field_image[0] = field_file_save_file($my_file_path, array(), $my_destination);

おそらく、いくつかのテストを実行する必要があります。そのため、宛先ディレクトリを破棄して、もう一度やり直す必要があります。

于 2010-06-04T10:37:51.643 に答える
1

ちょっと自分で解決したと思います。サムネイルを個別にfield_file_save_file()してから、ノードを同期するときにfield_file_load()します。

正常に動作しているようです。:)

于 2010-06-09T09:29:51.757 に答える
-4

データベースをいじる必要があります。残念ながら、フィールドの使用に応じて、データベースをさまざまな方法でレイアウトできます。そのため、説明は少し難しいです。CCK は、必要に応じてテーブルを移動し、名前を変更し、(de) データベースを正規化します。データはどこにでもある可能性があります:)そして、現在どこに住んでいるかに応じて、この問題を修正するのが簡単または困難になります.

たとえば、ノード タイプがfooで、サムネイル フィールドがbarであるとします。テーブルcontent_fooに列バーを持つことができますが、テーブルcontent_field_barを持つこともできます

そのテーブル内で、imagefield はファイルテーブルへの外部キーを格納します。ファイル テーブルにエントリが存在する場合はそのエントリを検索するか、新しいレコードを入力する必要があります。これは簡単ではありません。次に、そのファイル エントリのキーを content_foo テーブル、列バー、または content_field_bar に追加します。

ただし、これを開始する前に: 苦労する価値はありません。ノードを削除して、コンテンツを新しいノードにコピー アンド ペーストするだけです。

于 2010-06-04T09:29:42.960 に答える