在Drupal 7上创建带有图像字段的实体


Creation of entity with image field on Drupal 7

我想生成一个实体,其中包含drupal 7中另一个模块文件生成的图像。这是我的代码:

global $user;
$apercu = $_SESSION['image_generate'];
$file_apercu = new StdClass();
$file_apercu->uid = $user->uid;
$file_apercu->uri = $apercu;
$file_apercu->filemime = file_get_mimetype($file_apercu->uri);
$file_apercu->status = 1;
$file_apercu = file_save($file_apercu); 
$file_apercu = (array) $file_apercu;
$file_apercu = array($file_apercu);
$pdf = $_SESSION['pdf']->uri;
$file_pdf = new StdClass();
$file_pdf->uid = $user->uid;
$file_pdf->uri = $pdf;
$file_pdf->filemime = file_get_mimetype($file_pdf->uri);
$file_pdf->status = 1;
$file_pdf = file_save($file_pdf);
$file_pdf = (array) $file_pdf;
$file_pdf = array($file_pdf);
$form_panier = $_SESSION['form_state_panier'];
$sql = db_query('SELECT MAX("order_id") 
                FROM commerce_order
                WHERE uid = '.$user->uid.'')->fetchAssoc();
$values = array(
            'type' => 'commandeflyer',
            'uid' => intval($user->uid),
            'status' => 1,
            'comment' => 0,
            'promote' => 0,
        );
$entity = entity_create('node', $values);
$ewrapper = entity_metadata_wrapper('node', $entity);
$ewrapper->title->set('commandeflyer'.$sql['MAX("order_id")']);
$ewrapper->field_flyer_image_commande->set($file_apercu);
$ewrapper->field_pdf->set($file_pdf);
$ewrapper->field_numcommande->set(intval($sql['MAX("order_id")']));
$ewrapper->save(true);
entity_save('node', $entity);

当我运行这个代码时,我得到了这个错误:

EntityMetadataWrapperException : Invalid data value given. Be sure it matches the required data type and format. dans EntityMetadataWrapper->set() (ligne 122 dans /var/www/commerce_kickstart-7.x-2.9/profiles/commerce_kickstart/modules/contrib/entity/includes/entity.wrapper.inc).

但我的类型对应:pdf表示pdf,jpg表示图像。谢谢你的帮助。

找到的解决方案:

//appel de la variable user
global $user;
//recuperation de lapercu
$apercu = $_SESSION['image_generate'];
//creation de lobject file
$file_apercu = new StdClass();
$file_apercu->uid = $user->uid;
$file_apercu->uri = $apercu;
$file_apercu->filename = basename($file_apercu->uri);
$file_apercu->filemime = file_get_mimetype($file_apercu->uri);
$file_apercu->status = 1;
//sauvegarde en base
$file_apercu = file_save($file_apercu); 
//recuperation du pdf
$pdf = $_SESSION['pdf']->uri;
//creation de lobject file
$file_pdf = new StdClass();
$file_pdf->uid = $user->uid;
$file_pdf->uri = $pdf;
$file_pdf->filename = basename($file_pdf->uri);
$file_pdf->filemime = file_get_mimetype($file_pdf->uri);
$file_pdf->status = 1;
//sauvegarde en base
$file_pdf = file_save($file_pdf);
//recuperation du numero de commande
$form_panier = $_SESSION['form_state_panier'];
$sql = db_query('SELECT MAX("order_id") 
                FROM commerce_order
                WHERE uid = '.$user->uid.'')->fetchAssoc();
//creation de lentity
$values = array(
            'type' => 'commandeflyer',
            'uid' => intval($user->uid),
            'status' => 1,
            'comment' => 0,
            'promote' => 0,
        );
//creation dentity sans limage et le pdf
$entity = entity_create('node', $values);
$ewrapper = entity_metadata_wrapper('node', $entity);
$ewrapper->title->set('commandeflyer'.$sql['MAX("order_id")']);
$ewrapper->field_numcommande->set(intval($sql['MAX("order_id")']));
$ewrapper->save(true);
entity_save('node', $entity);
//chargement de lentity
$commandeflyer = node_load($nid = $entity->nid, $vid = NULL, $reset = FALSE);
//ajout image
$commandeflyer->field_flyer_image_commande[LANGUAGE_NONE][] = array(
    'fid' => $file_apercu->fid,
    'uid' => $file_apercu->uid,
    'uri' => $file_apercu->uri,
    'filename' => $file_apercu->filename,
    'filemime' => $file_apercu->filemime,
    'status' => $file_apercu->status
    );
//ajout pdf
$commandeflyer->field_pdf[LANGUAGE_NONE][] = array(
    'fid' => $file_pdf->fid,
    'display' => '1',
    'uid' => $file_pdf->uid,
    'uri' => $file_pdf->uri,
    'filename' => $file_pdf->filename,
    'filemime' => $file_pdf->filemime,
    'status' => $file_pdf->status
    );
//save entity
node_save($commandeflyer);