Como criar programaticamente nós com campos de data e imagem?
Eu sei que posso fazer isso no Drupal 7 com o seguinte código.
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);
Qual é o código equivalente para o Drupal 8?
Respostas:
O código a seguir ajudará você a salvar uma imagem em um novo nó.
Para obter mais informações, consulte http://realityloop.com/blog/2015/10/08/programmatically-attach-files-node-drupal-8 .
fonte
No drupal 8, entidades são objetos e, como tal, criar uma entidade é criar uma instância da classe de tipo da entidade. Se você conhece a classe da entidade, pode usar a nova palavra-chave ou a função de criação.
IE
$foo = new Foo();
ou$foo = Foo::create();
Se você não conhece a classe da entidade (apenas o nome da máquina), pode usar a solicitação da classe Storage da seguinte forma:
\Drupal::entityTypeManager()->getStorage($entity_type_id)->create();
Para preencher os campos de uma entidade, você pode usar o
$entity->set($key, $value)
método no objeto da entidade ou passar umakey=>value
matriz para o construtor da entidade. Assim sendo:Para salvar uma entidade, você só precisa chamar o
$entity->save()
método no objeto da entidade.Como os arquivos no drupal 8 também são entidades, você precisa passar o ID da entidade de arquivo ou a entidade de arquivo real como valor.
Aqui está um código para o seu cenário específico:
fonte
Eu acho que a maneira orientada a objetos é mais conveniente, não é?
fonte
Se você deseja fazer da maneira mais limpa (testável), use o
entity_type.manager
serviço:O problema com a
Node::create
função, que é chamada estática, e é por isso que você não pode mais testar sua unidade. Evite fazer chamadas estáticas sempre que possível. Isso tornará seu código mais legível (porque as dependências serão claras).fonte
Outra maneira de criar nó com imagem é:
fonte
O código a seguir está funcionando para mim
fonte
$form_state
está disponível apenas em contextos específicos; caso contrário, você não poderá acessá-lo.fonte