2015-04-15 29 views

Odpowiedz

-1

Możesz uzyskać pomoc od https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Entity!Plugin!DataType!EntityReference.php/8

Albo można pobrać przykłady podmiot próbka zbyt https://www.drupal.org/project/examples

Lub można używać metody zbyt które jest jak poniżej:

Konfigurowanie modułu 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 

Tworzenie typu jednostki treści w Drupal 8

Stworzymy jednostkę "Kontakt", aby dodawać, edytować i usuwać osoby (kontakty). Jest w pełni fieldable i wykorzystuje większość nowych koncepcji jednostki dostępne w 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' 

Te nazwy trasy dla działań określonych w sekcji „link” z Adnotacja podmiotu musi być zgodna z właściwym wzorcem. Szczegółowe informacje znajdują się w poniższej Klasie treści.

content_entity_example.links.menu.yml

W połączeniu z pliku routingu, to zastępuje hook_menu dla modułu.

# 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 
+0

Wydaje się to być kod do tworzenia niestandardowy typ jednostki? Ale pytanie dotyczy tworzenia pola odniesienia encji. – Christian

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

Możesz dodać do tego tekst towarzyszący. Nie jest zbyt jasne, co demonstrujesz. – Christian

0

To stworzy pole Podmiotu Referencyjnego dla node typów zawartości z article wiązki.

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

Uwaga można zmienić target_type dla innych podmiotów jak taxonomy_term.

0

Więc mam nadzieję, że mogę znaleźć to szybciej, jeśli muszę znowu ...

Tworzenie przechowywanie polu:

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(); 
} 

Tworzenie pola:

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(); 
+0

czy znalazłeś jakąś oficjalną dokumentację na powyższym kodzie? Pokazuje kluczowe wartości? Należy zauważyć, że "ustawienia" będą mapować (do pewnego stopnia) nazwy pól formularzy znajdujące się na stronie ustawień. Aby więc zaznaczyć pole wyboru dla danego typu zawartości; ''page' => 'page''. – zkolnik

+0

Nie mogłem znaleźć wiele dokumentacji online, co jest głównym powodem, dla którego napisałem tutaj. Jednak podstawowy moduł Field ma dobry przykład tego w klasie "EntityReferenceAutoCreateTest". W tym przykładzie również używane są wartości 'target_bundles' i' target_type'. Ponadto, jeśli spojrzysz na stronę ustawień, zaznaczają się również pola wyboru. – sareed