Drupal → Программное добавление сущностей

25.11.2020

Контент-сущности

Узнать список доступных полей у конкретной контент-сущности можно заглянув в её метод baseFieldDefinitions().

Нода:

$node = \Drupal\node\Entity\Node::create([
  // Required fields
  'type' => 'page', // Node type id
  'title' => 'Example node',
  // Optional fields
  'status' => \Drupal\node\NodeInterface::PUBLISHED,
  'uid' => 0, // User id. 0 - is anonymouse
  'created' => time(),
  'changed' => time(),
  'promote' => \Drupal\node\NodeInterface::NOT_PROMOTED,
  'sticky' => \Drupal\node\NodeInterface::NOT_STICKY,
  // Custom fields
  'body' => [
    'value' => 'Example node body',
    'format' => 'full_html',
  ],
  'field_string' => 'Example string field value',
  'field_integer' => 123,
  'field_boolean' => TRUE,
  'field_term_reference' => 234, // Term id (tid)
  'field_entity_reference' => 345, // Entity id
  'field_file' => 456, // File id (fid)
  'field_list' => 'foo', // Key
  'field_email' => 'mail@example.com',
  'field_timestamp' => time(),
  'field_date' => [
    'value' => '2020-11-24T10:00:00',
  ],
  'field_date_range' => [
    'value' => '2020-11-24T10:00:00',
    'end_value' => '2020-12-24T10:00:00',
  ],
  'field_link' => [
    'uri' => 'http://xandeadx.ru',
    'title' => 'xandeadx.ru',
  ],
  'field_multiple_strings' => [
    'Foo',
    'Bar',
  ],
  'path' => [
    'alias' => '/example-node',
  ],
]);
$node->save();

Термин:

$term = \Drupal\taxonomy\Entity\Term::create([
  // Required fields
  'vid' => 'tags', // Vocabulary id
  'name' => 'Example term',
  // Optional fields
  'status' => 1,
  'description' => [
    'value' => 'Example term description',
    'format' => 'full_html',
  ],
  'weight' => 123,
  'parent' => [234], // Parent term id (tid)
  'changed' => time(),
]);
$term->save();

Контент блок:

$content_block = \Drupal\block_content\Entity\BlockContent::create([
  // Required fields
  'type' => 'basic', // Content block type id
  'info' => 'Example content block',
  // Optional fields
  'changed' => time(),
]);
$content_block->save();

Файл:

$file = \Drupal\file\Entity\File::create([
  // Required fields
  'uri' => 'public://image.jpg',
  // Optional fields
  'filename' => 'image.jpg',
  'status' => FILE_STATUS_PERMANENT,
  'uid' => 1,
  'created' => time(),
  'changed' => time(),
]);
$file->save();

Пользователь:

$user = \Drupal\user\Entity\User::create([
  // Required fields
  'name' => 'Example user',
  'pass' => 'qwerty',
  'mail' => 'user@example.com',
  // Optional fields
  'status' => TRUE,
  'roles' => ['administrator'],
  'created' => time(),
  'changed' => time(),
]);
$user->save();

Товар и вариация:

$variation = \Drupal\commerce_product\Entity\ProductVariation::create([
  'type' => 'default', // Product type id
  'sku' => 'PRODUCT1',
  'title' => 'Product 1',
  'price' => [
    'number' => 10,
    'currency_code' => 'USD',
  ],
]);
$variation->save();
 
$product = \Drupal\commerce_product\Entity\Product::create([
  'type' => 'default', // Product type id
  'title' => $variation->label(),
  'variations' => $variation,
  'stores' => 1, // Store id
]);
$product->save();

Ссылка меню:

$menu_link = \Drupal\menu_link_content\Entity\MenuLinkContent::create([
  // Required fields
  'title' => 'Node 1',
  'menu_name' => 'main',
  'link' => 'internal:/node/1',
  // Optional fields
  'description' => 'Link description',
  'weight' => 10,
  'expanded' => TRUE,
  'enabled' => TRUE,
  'parent' => 'menu_link_content:c7b195ec-0e2b-4aa8-aa73-19cf1c16256e',
]);
$menu_link->save();

Конфиг-сущности

Конфиг-сущности лучше создавать с помощью yml файлов в папке config/install вашего модуля, но если надо, то можно и программно, например в тестах.

Словарь:

$vocabulary = \Drupal\taxonomy\Entity\Vocabulary::create([
  // Required fields
  'vid' => 'example_vocabulary',
  'name' => 'Example vocabulary',
  // Optional fields
  'description' => 'Example vocabulary description',
  'weight' => 123,
]);
$vocabulary->save();

Тип нод:

$node_type = \Drupal\node\Entity\NodeType::create([
  // Required fields
  'type' => 'example_node_type',
  'name' => 'Example node type',
  // Optional fields
  'description' => 'Example node type description',
  'help' => 'Example node type help',
  'new_revision' => FALSE,
  'preview_mode' => DRUPAL_OPTIONAL,
  'display_submitted' => TRUE,
]);
$node_type->save();
node_add_body_field($node_type);

Контактная форма:

$contact_form = \Drupal\contact\Entity\ContactForm::create([
  // Required fields
  'id' => 'example_contact_form',
  'label' => 'Example contact form',
  'recipients' => ['mail@example.com'],
  // Optional fields
  'message' => 'Form submitted.',
  'redirect' => '/example-contact-form',
  'weight' => 123,
  'reply' => '',
]);
$contact_form->save();

Поле:

$field_storage = \Drupal\field\Entity\FieldStorageConfig::create([
  // Required fields
  'field_name' => 'field_example',
  'entity_type' => 'node',
  'type' => 'string',
  // Optional fields
  'cardinality' => 1,
  'settings' => [
    'max_length' => 250,
  ],
]);
$field_storage->save();

$field_instance = \Drupal\field\Entity\FieldConfig::create([
  // Required fields
  'field_storage' => $field_storage,
  'bundle' => 'page',
  'label' => 'Example field',
  // Optional fields
  'settings' => [],
  'default_value' => [
    0 => [
      'value' => 'Example value',
    ],
  ],
]);
$field_instance->save();

Текстовый формат:

$filter_format = \Drupal\filter\Entity\FilterFormat::create([
  // Required fields
  'format' => 'filtered_html',
  'name' => 'Filtered HTML',
  // Optional fields
  'weight' => 123,
  'filters' => [
    'filter_html' => [
      'status' => 1,
      'settings' => [
        'allowed_html' => '<h2 id> <h3> <h4> <h5> <h6> <p> <br> <strong> <a href hreflang>',
      ],
    ],
    'filter_html_image_secure' => [
      'status' => 1,
    ],
  ],
]);
$filter_format->save();

Конфиг блока:

$block = \Drupal\block\Entity\Block::create([
  // Required fields
  'id' => 'example_block_id',
  'plugin' => 'page_title_block', // Block plugin id
  'theme' => 'bartik',
  'region' => 'content',
  // Optional fields
  'weight' => 123,
  'status' => TRUE,
  'settings' => [
    'id' => 'page_title_block', // Block plugin id
    'provider' => 'core', // Block plugin module owner
    'label' => 'Page title',
    'label_display' => FALSE,
  ],
  'visibility' => [
    'request_path' => [
      'id' => 'request_path', // Condition plugin id
      'pages' => '/node/234',
      'negate' => TRUE,
    ],
  ],
]);
$block->save();

Тип контент блока:

$content_block_type = \Drupal\block_content\Entity\BlockContentType::create([
  // Required fields
  'id' => 'example_content_block_type',
  'label' => 'Example content block type',
  // Optional fields
  'description' => 'Example description',
]);
$content_block_type->save();

Формат даты:

$date_format = \Drupal\Core\Datetime\Entity\DateFormat::create([
  // Required fields
  'id' => 'example_date_format',
  'label' => 'Example date format',
  'pattern' => 'Y-m-d',
]);
$date_format->save();

Меню:

$menu = \Drupal\system\Entity\Menu::create([
  // Required fields
  'id' => 'main',
  'label' => 'Main menu',
  // Optional fields
  'description' => 'Menu description',
]);
$menu->save();
Написанное актуально для
Drupal 8+
Похожие записи

Добавить комментарий