créer un nœud multilingue par programmation

8

j'essaie de créer un nœud multilingue en utilisant un script php.

Je fais ça:

 $node = new stdClass();
 $node->title = "Test ".mktime();
 $node->type = "job";
 $node->language = 'de'; // 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
 $node->comment = 1; //2 = comments on, 1 = comments off
 $node->path = array('alias' => 'das-ist-ein-test-'.mktime());
 $node->body[$node->language][0]['value']   = "Body Body Body";
 $node->body[$node->language] = text_summary("Body Body Body");
 $node->body[$node->language]  = 'filtered_html';
 node_save($node);

Tant que je mets $ node-> language sur 'und', tout fonctionne bien. Mais dès que j'ai défini la langue sur 'de' ou 'en' (les deux langues sont activées dans mon installation Drupal), le corps du texte n'est pas enregistré.

Donc, ma question est: quelqu'un peut-il me fournir un exemple de travail sur la façon de stocker un nœud multilingue (de, en) dans Drupal en utilisant le code du programme.

Je vous remercie

caspermc
la source
[Lien] J'espère que cela pourrait vous aider dans la bonne direction ( drupal.stackexchange.com/questions/6401/… )
Vic

Réponses:

9

Cela dépend si votre champ corporel est traduisible ou non. Veuillez consulter cette explication concernant les champs traduisibles: https://drupal.stackexchange.com/a/31639/2466

$node_lang = 'ru'; // I am a Russian girl

$node = new stdClass();
$node->title = "Test ".mktime();
$node->type = 'article'; // Your type
$node->language = $node_lang;
$node->uid = 1; 
$node->status = 1;

// Get proper langcode
$body_field_info = field_info_field('body');
if (field_is_translatable('node', $body_field_info)) {
  $body_language = field_valid_language($node_lang);
} else {
  $body_language = LANGUAGE_NONE;
}

// Some lorem ipsum.
// You can add custom summary:
// $node->body[$body_language][0]['summary'] = 'Summary';
$node->body[$body_language][0]['value']   = 'Lorem monotonectally iterate resource-leveling innovation before timely core competencies. Globally coordinate sustainable strategic theme areas and intermandated infomediaries. Monotonectally brand customer directed solutions and high-quality bandwidth.';

node_save($node);

Il y a un problème pour Drupal 8 pour rendre l'API Field Language plus utilisable.

kalabro
la source
Merci beaucoup pour votre réponse. Ça marche maintenant. Bien que je trouve cela assez étrange, le nœud lui-même soit spécifique à la langue alors que les champs de ce nœud sont «indéfinis». Je me demande s'il y a un cas d'utilisation où les champs sont spécifiques à la langue (dans mes tests, chaque champ était «und»). Si les champs sont toujours «und», je pourrais abandonner l'appel de la fonction alltogether.
caspermc
1
Il n'est pas recommandé d'utiliser uniquement 'und'comme clé de champ dans les sites multilingues.
kalabro
@kalabro - C'est vrai, c'est à la LANGUAGE_NONEplace.
leymannx