Drupal: Programlı ImageField görüntüleri tasarrufu

4 Cevap php

Ben düğüm ile ilişkili küçük görüntüyü kaydetmek için deneyin kadar ben, çalışıyor düğümleri, bazı verileri kaydeder bir eşitleme işlevi yazmak çalışıyorum.

Ben dosyayı indirmek ve benim sites / default / files klasörüne koymak için idare ettik, ama Drupal anlatmak için en iyi yolu nedir, "o CCK ImageField bu dosyayı koymak?"

EDIT To clarify a bit.. I sync the thumbnails separately (since one image can be used by several nodes)... I would like the initial thumbnail sync to save the files in the correct folder (not a temp one) and just point the imagefield to this file... That's what annoys me with field_file_save_file(), it saves a new file instead of just making a pointer.. Any advice?

4 Cevap

Biraz kendimi düşünüyorum bu çözülür. Düğümleri senkronize zaman I) (field_file_load ayrı ve daha sonra) (bunları benim minik field_file_save_file.

Tamam çalışıyor gibi görünüyor. :)

Sen field_file_save_file(); sizin desitnation için bir geçici dizinden dosyayı taşımak ve bir CCK alanı olarak kaydedilecek nesnesi oluşturmak için kullanabilirsiniz.

Bkz: http://api.lullabot.com/field_file_save_file

Sonra dönen değeri gibi pek kullanarak alanını kaydedebilirsiniz:

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

Muhtemelen birkaç testler gerekir. Yani hedef dizini çöp ve tekrar yapmak gerekir.

Bu kod yapacak:

$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);

You will need to poke around in the database. Unfortunately, your database can be layed out in numerous ways, acc to the use of fields. So explaining is a little hard. CCK will move around tables, rename stuff, and (de) normalise databases if it thinks this is needed. The data may be anywhere :) And depending on where it lives now, it becomes easier or harder to fix this problem.

Say, düğüm türü foo ve küçük alandır bar. Bir sütun bar tabloda content_foo olabilir, ama aynı zamanda bir tablo olabilir content_field_bar

Bu tablo içinde, file masaya ImageField mağazalar yabancı anahtarlar. Eğer varsa, dosya tablosunda girişi bulmak gerekiyor, yoksa yeni bir kayıt girmek ya. Bu kolay değil. Sonra bu content_foo tabloda dosya giriş, sütun çubuğu veya content_field_bar en çok anahtarını ekleyin.

Ancak, bu başlamadan önce: gerçekten ağrı değil: sadece düğümü silmek ve yeni bir içeriği kopyalayıp yapıştırın.