Comment créer par programme des nœuds avec des champs de date et d'image?
Je sais que je peux le faire dans Drupal 7 avec le code suivant.
global $user;
$node = new stdClass();
$node->title = "YOUR TITLE";
$node->type = "YOUR_NODE_TYPE";
node_object_prepare($node); // Sets some defaults. Invokes hook_prepare() and hook_node_prepare().
$node->language = LANGUAGE_NONE; // Or e.g. 'en' if locale is enabled
$node->uid = $user->uid;
$node->status = 1; //(1 or 0): published or not
$node->promote = 0; //(1 or 0): promoted to front page
//image field
$existing_filepath = "/home/nzcodarnoc/sites/default/files/imported/picture.jpg"
$new_filepath = "public://picture.jpg"
// Create the file object
$drupal_file = file_save_data(file_get_contents($existing_filepath), $new_filepath);
$drupal_file->alt = $node->title;
$drupal_file->title = $node->title;
// Assign the file object to the node, as an array
$node->field_my_file[$node->language][0] = get_object_vars($drupal_file);
//date field
$node->birth_date[LANGUAGE_NONE][0]['value'] = time();
$node = node_submit($node); // Prepare node for saving
node_save($node);
Quel est le code équivalent pour Drupal 8?
Réponses:
Le code suivant vous aidera à enregistrer une image dans un nouveau nœud.
Pour plus d'informations, voir http://realityloop.com/blog/2015/10/08/programmatically-attach-files-node-drupal-8 .
la source
Dans Drupal 8, les entités sont des objets et, en tant que telles, créer une entité revient à créer une instance de la classe de type de l'entité. Si vous connaissez la classe de l'entité, vous pouvez utiliser le nouveau mot-clé ou la fonction create.
IE
$foo = new Foo();
ou$foo = Foo::create();
Si vous ne connaissez pas la classe d'entité (uniquement le nom de la machine), vous pouvez utiliser la demande de la classe Storage comme suit:
\Drupal::entityTypeManager()->getStorage($entity_type_id)->create();
Pour renseigner les champs d'une entité, vous pouvez utiliser la
$entity->set($key, $value)
méthode sur l'objet entité ou transmettre unkey=>value
tableau au constructeur de l'entité. En tant que tel:Pour sauvegarder une entité, il suffit d'appeler la
$entity->save()
méthode sur l'objet entité.Comme les fichiers de Drupal 8 sont également des entités, vous devez soit passer l’ID de l’entité de fichier, soit l’entité de fichier réelle, en tant que valeur.
Voici un code pour votre scénario spécifique:
la source
Je pense que la méthode orientée objet est plus pratique, n'est-ce pas?
la source
Si vous voulez le faire de la manière la plus propre (testable), utilisez
entity_type.manager
service:Le problème avec la
Node::create
fonction, c’est qu’il s’agit d’un appel statique, c’est pourquoi vous ne pouvez plus réellement tester votre classe à l’unité. Évitez de faire des appels statiques chaque fois que c'est possible. Cela rendra votre code plus lisible (car les dépendances seront claires).la source
Une autre façon de créer un noeud avec une image est:
la source
Le code suivant fonctionne pour moi
la source
$form_state
est disponible uniquement dans des contextes spécifiques; sinon, vous ne pouvez pas y accéder.la source