создать многоязычный узел программно

8

Я пытаюсь создать многоязычный узел, используя скрипт php.

Я делаю это:

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

Пока я устанавливаю $ node-> language в 'und', все работает нормально. Но как только я установил язык 'de' или 'en' (оба языка активированы в моей установке Drupal), основной текст не будет сохранен.

Поэтому мой вопрос: кто-нибудь может дать мне рабочий пример того, как сохранить многоязычный узел (de, en) в Drupal с помощью программного кода.

Спасибо

caspermc
источник
[Ссылка] Я надеюсь, что это может помочь вам в правильном направлении ( drupal.stackexchange.com/questions/6401/… )
Вик

Ответы:

9

Это зависит от того, является ли ваше тело поле переводимым или нет. Пожалуйста, посмотрите это объяснение о переводимых полях: 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);

В Drupal 8 существует проблема, позволяющая сделать API Field Language более удобным.

kalabro
источник
Большое спасибо за ваш ответ. Теперь работает. Тем не менее, я нахожу довольно странной концепцию, что сам узел является языковым, тогда как поля этого узла являются «неопределенными». Мне интересно, есть ли какой-либо вариант использования, где поля зависят от языка (в моих тестах каждое поле было 'und'). Если поля всегда 'und', я мог бы полностью отказаться от вызова функции.
caspermc
1
Не рекомендуется использовать просто 'und'как ключ поля на многоязычных сайтах.
Калабро
@kalabro - Правильно, это LANGUAGE_NONEвместо этого.
leymannx