web-dev-qa-db-fra.com

Créer une entité par programme dans Drupal

J'ai créé une entité via Entity Construction Kit, au départ, je voulais utiliser des règles pour créer la nouvelle entité, mais l'entité est alignée et les champs ne sont pas exposés dans les règles (à partir de maintenant, quelqu'un essaie de travailler sur un correctif pour cela ), mais dans l'intervalle, je voulais écrire une fonction simple qui crée une entité, ce qui, je suppose, ressemblerait un peu à la création d'un nœud par programmation, mais j'y suis depuis environ 4 heures et je n'ai pas gagné un pouce, J'ai entity_create et entity_save mais ils ne font pas grand-chose et je ne trouve aucune documentation à ce sujet.

Ce que j'aimerais voir, c'est comment créer un exemple d'entité à partir d'un bundle fait avec eck, ou via du code, qui est mis en place.

Merci beaucoup

Edit: La dernière chose que j'ai besoin de comprendre est de savoir comment spécifier le nom des champs qui sont attachés à l'entité afin que je puisse également entrer des valeurs pour ceux-ci.

$values = array('uid' => 1, 'field_receipt_prod_ref' => 1, 'type' => 'receipt');        
$new_ent = entity_create('receipt', $values)->save();
7
Antonio Torres

La plupart de ce que vous avez n'a pas l'air trop mal. L'essentiel avec les champs qui vous manquent est qu'ils ont une langue, qu'ils peuvent être à valeurs multiples et que la valeur est généralement stockée dans une sous-clé 'value'. Je suppose que le champ ref est une référence nodale, ce qui signifie qu'il est réellement stocké avec nid au lieu de value.

La chose la plus simple que vous pouvez faire pour voir comment cela est structuré consiste à installer le module Devel et à utiliser l'onglet Devel pour consulter la structure. Je ne sais pas si cela apparaît avec les entités ECK, mais c'est le cas pour les nœuds.

Essaye ça:

$new_ent = entity_create('receipt', array(
  'uid' => 1,
  'type' => 'receipt', //bundle
  'field_receipt_prof_ref' => array(      
    LANGUAGE_NONE => array(
      0 => array(
        'nid' => 1,
      ),
    ),
  ),
))->save();
15
loganfsmyth

L'approche la plus simple est à l'aide de entity_metadata_wrapper() .

$e = entity_create($entityType, array('type' => $bundleName));
$ew = entity_metadata_wrapper($entityType, $e);
$ew->field_name->set('value');
$ew->save();
27
mojzis