Mehrsprachigen Knoten programmgesteuert erstellen


8

Ich versuche, einen mehrsprachigen Knoten mit einem PHP-Skript zu erstellen.

Ich mache das:

 $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);

Solange ich $ node-> language auf 'und' setze, funktioniert alles einwandfrei. Sobald ich jedoch die Sprache auf 'de' oder 'en' setze (beide Sprachen sind in meiner Drupal-Installation aktiviert), wird der Text nicht mehr gespeichert.

Meine Frage lautet also: Kann mir jemand ein funktionierendes Beispiel geben, wie ein mehrsprachiger Knoten (de, en) mithilfe von Programmcode in Drupal gespeichert wird?

Vielen Dank


[Link] Ich hoffe, dies könnte Ihnen in die richtige Richtung helfen ( drupal.stackexchange.com/questions/6401/… )
Vic

Antworten:


9

Es hängt davon ab, ob Ihr Körperfeld übersetzbar ist oder nicht. Bitte lesen Sie diese Erklärung zu übersetzbaren Feldern: 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);

Es gibt ein Problem für Drupal 8, um die Feldsprachen-API benutzerfreundlicher zu machen.


Ich danke Ihnen sehr für Ihre Antwort. Es funktioniert jetzt. Obwohl ich es für ein ziemlich seltsames Konzept halte, dass der Knoten selbst sprachspezifisch ist, während die Felder von diesem Knoten "undefiniert" sind. Ich frage mich, ob es einen Anwendungsfall gibt, in dem die Felder sprachspezifisch sind (in meinen Tests war jedes Feld 'und'). Wenn die Felder immer 'und' sind, könnte ich den Funktionsaufruf insgesamt fallen lassen.
Caspermc

1
Es wird nicht empfohlen, 'und'in mehrsprachigen Websites nur den Feldschlüssel zu verwenden .
Kalabro

@kalabro - Richtig, es ist LANGUAGE_NONEstattdessen.
Leymannx
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.