При разработке мультиязычных сайтов в Drupal возникает необходимость создавать контент на нескольких языках программно. В этой статье мы рассмотрим, как это можно сделать, используя Drupal API.

Создание ноды на основе текущего языка сайта

Для создания ноды на основе текущего языка сайта в Drupal, мы используем функцию node_save(). Ниже приведен пример кода:

$node = new stdClass();
$node->type = 'article';
$node->title = 'Пример ноды';
$node->language = $language->language;
$node->uid = 1;
$node->status = 1;
node_object_prepare($node);

// Здесь можно задать значения полей ноды, например:
$node->body[$node->language][0]['value'] = 'Текст контента на текущем языке сайта';

node_save($node);

В этом примере мы создаем ноду типа «article» с заголовком «Пример ноды». Для задания значения поля body мы используем текущий язык сайта, полученный из объекта $language.

Создание ноды на конкретном языке сайта

Если необходимо создать ноду на определенном языке сайта, то нужно явно указать значение поля language в объекте ноды. В следующем примере мы создаем ноду на французском языке:

$node = new stdClass();
$node->type = 'article';
$node->title = 'Exemple de node';
$node->language = 'fr';
$node->uid = 1;
$node->status = 1;
node_object_prepare($node);

// Здесь можно задать значения полей ноды на французском языке, например:
$node->body['fr'][0]['value'] = 'Текст контента на французском языке';

node_save($node);

Дополнительные вопросы и ответы:

1. Как получить список доступных языков сайта в Drupal?

Для получения списка доступных языков сайта в Drupal можно использовать функцию language_list(). Она возвращает массив, содержащий все языки, установленные на сайте. Ниже приведен пример кода:

$languages = language_list();
foreach ($languages as $language) {
  echo $language->language;
}

2. Как получить текущий язык сайта в Drupal?

Текущий язык сайта в Drupal можно получить с помощью глобальной переменной $language. Эта переменная содержит объект, который содержит информацию о текущем языке, включая его код. Ниже приведен пример кода:

$current_language = $language->language;
echo $current_language;

3. Можно ли создавать ноды с переведенными полями программно в Drupal?

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

$node = new stdClass();
$node->type = 'article';

// Задаем значения полей на английском языке
$node->title['en'][0]['value'] = 'English title';
$node->body['en'][0]['value'] = 'English body';

// Задаем значения полей на французском языке
$node->title['fr'][0]['value'] = 'Titre en français';
$node->body['fr'][0]['value'] = 'Contenu en français';

node_save($node);

В этом примере мы создаем ноду типа «article» с заголовками и содержимым на английском и французском языках.