Ответ 1
$node = new stdClass();
$node->title = "YOUR TITLE";
$node->type = "YOUR_NODE_TYPE";
....
$node->field_customer_nid[$node->language][]['target_id'] = $form_state['values']['entity id'];
...
node_submit($node);
node_save($node);
Я хочу создать ссылочное поле сущности в Drupal 8 с помощью моего настраиваемого модуля. Например, когда кто-то нажимает ссылку на странице Drupal, автоматически создается ссылочное поле сущности на странице node.
Может ли кто-нибудь помочь мне с этим?
$node = new stdClass();
$node->title = "YOUR TITLE";
$node->type = "YOUR_NODE_TYPE";
....
$node->field_customer_nid[$node->language][]['target_id'] = $form_state['values']['entity id'];
...
node_submit($node);
node_save($node);
Это создаст поле ссылки объекта для node
типов контента с пакетом article
.
$form['node_id'] = array(
'#type' => 'entity_autocomplete',
'#title' => $this->t('Node'),
'#target_type' => 'node',
'#selection_settings' => ['target_bundles' => ['article']],
'#tags' => TRUE,
'#size' => 30,
'#maxlength' => 1024,
);
Обратите внимание, что вы можете изменить target_type
для других объектов, таких как taxonomy_term
.
Так что я могу надеяться найти это быстрее, если мне нужно снова...
Создание хранилища полей:
if (!$field_storage = FieldStorageConfig::loadByName($entity_type, $field_name)) {
FieldStorageConfig::create([
'field_name' => $field_name,
'entity_type' => $entity_type,
'type' => $type,
'cardinality' => -1,
// Optional to target entity types.
'settings' => [
'target_type' => $entity_target_type, // Ex: node, taxonomy_term.
],
])->save();
}
Создать поле:
FieldConfig::create([
'field_name' => $field_name,
'entity_type' => $entity_type,
'bundle' => $bundle,
'label' => $label,
'cardinality' => -1,
// Optional to target bundles.
'settings' => [
'handler' => 'default',
'handler_settings' => [
'target_bundles' => [
$vid1,
$vid2,
],
],
],
])->save();
Вы можете получить справку https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Entity!Plugin!DataType!EntityReference.php/8
Или вы можете загрузить примеры примеров объектов https://www.drupal.org/project/examples
Или вы также можете использовать мой метод, который выглядит следующим образом:
Настройка модуля content_entity_example.info.yml
name: Content Entity Example
type: module
description: 'Provides ContentEntityExampleContact entity.'
package: Example modules
core: 8.x
# These modules are required by the tests, must be available at bootstrap time
dependencies:
- options
- entity_reference
- examples
Создание типа объекта контента в Drupal 8
Мы создадим объект "Контакт", чтобы добавлять, редактировать и удалять людей (контакты). Он полностью полезна и использует большинство новых концепций сущностей, доступных в Drupal 8.
Routing content_entity_example.routing.yml
# This file brings everything together. Very nifty!
# Route name can be used in sevaral place (links, redirects, local actions etc.)
entity.content_entity_example_contact.canonical:
path: '/content_entity_example_contact/{content_entity_example_contact}'
defaults:
# Calls the view controller, defined in the annotation of the contact entity
_entity_view: 'content_entity_example_contact'
_title: 'Contact Content'
requirements:
# Calls the access controller of the entity, $operation 'view'
_entity_access: 'content_entity_example_contact.view'
entity.content_entity_example_contact.collection:
path: '/content_entity_example_contact/list'
defaults:
# Calls the list controller, defined in the annotation of the contact entity.
_entity_list: 'content_entity_example_contact'
_title: 'Contact List'
requirements:
# Checks for permission directly.
_permission: 'view contact entity'
content_entity_example.contact_add:
path: '/content_entity_example_contact/add'
defaults:
# Calls the form.add controller, defined in the contact entity.
_entity_form: content_entity_example_contact.add
_title: 'Add Contact'
requirements:
_entity_create_access: 'content_entity_example_contact'
entity.content_entity_example_contact.edit_form:
path: '/content_entity_example_contact/{content_entity_example_contact}/edit'
defaults:
# Calls the form.edit controller, defined in the contact entity.
_entity_form: content_entity_example_contact.edit
_title: 'Edit Contact'
requirements:
_entity_access: 'content_entity_example_contact.edit'
entity.content_entity_example_contact.delete_form:
path: '/contact/{content_entity_example_contact}/delete'
defaults:
# Calls the form.delete controller, defined in the contact entity.
_entity_form: content_entity_example_contact.delete
_title: 'Delete Contact'
requirements:
_entity_access: 'content_entity_example_contact.delete'
content_entity_example.contact_settings:
path: 'admin/structure/content_entity_example_contact_settings'
defaults:
_form: '\Drupal\content_entity_example\Form\ContactSettingsForm'
_title: 'Contact Settings'
requirements:
_permission: 'administer contact entity'
Имена маршрутов для действий, определенных в разделе "ссылка" аннотации объекта, должны соответствовать правильному шаблону. Подробнее см. Ниже в разделе Content Entity Class.
content_entity_example.links.menu.yml
В сочетании с файлом маршрутизации это заменяет hook_menu для модуля.
# Define the menu links for this module
entity.content_entity_example_contact.collection:
title: 'Content Entity Example: Contacts Listing'
route_name: entity.content_entity_example_contact.collection
description: 'List Contacts'
weight: 10
content_entity_example_contact.admin.structure.settings:
title: Contact Settings
description: 'Configure Contact entity'
route_name: content_entity_example.contact_settings
parent: system.admin_structure
content_entity_example.links.action.yml
# All action links for this module
content_entity_example.contact_add:
# Which route will be called by the link
route_name: content_entity_example.contact_add
title: 'Add Contact'
# Where will the link appear, defined by route name.
appears_on:
- entity.content_entity_example_contact.collection
- entity.content_entity_example_contact.canonical