it-swarm.com.de

So erstellen Sie ein Entitätsreferenzfeld von einer benutzerdefinierten Entität zu einem bestimmten Inhaltstyp

Ich bin auf Drupal 8) und verwende BaseFieldDefinition::create('entity_reference') für meinen benutzerdefinierten Entitätstyp, um ein Entitätsreferenzfeld hinzuzufügen.

Ich benutze diese ->setSetting('target_type', 'node') auch, um Knoten zu erhalten, aber dies gibt mir alle Knoten eines beliebigen Inhaltstyps;

Gibt es eine Möglichkeit oder Möglichkeit, diese Knoten nach einem bestimmten Inhaltstyp zu filtern?

Hier ist der Code für mein Feld:

$fields['project_id'] = BaseFieldDefinition::create('entity_reference')
      ->setLabel(t('Project'))
      ->setDescription(t('The project ID, transaction was created for.'))
      ->setSetting('target_type', 'node')
      ->setSetting('handler', 'default')
      ->setTargetEntityTypeId('project')
      ->setDisplayOptions('view', array(
        'label'  => 'hidden',
        'type'   => 'project',
        'weight' => 0,
      ))
      ->setDisplayOptions('form', array(
        'type'     => 'entity_reference_autocomplete',
        'weight'   => 5,
        'settings' => array(
          'match_operator'    => 'CONTAINS',
          'size'              => '60',
          'autocomplete_type' => 'tags',
          'placeholder'       => '',
        ),
      ))
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

Ich möchte, dass dieses Feld auf den Inhaltstyp project und nicht auf alle Knotentypen verweist.

4
otarza

Sie suchen nach der Einstellung handler_settings, die die Konfiguration für den von Ihnen ausgewählten Handler bereitstellt. In Ihrem Fall möchten Sie:

$handler_settings = [
  'target_bundles' => [
    'project' => 'project',
  ],
];

Wie immer bei Feldern, Widgets und Formatierern erstellen Sie einfach ein konfigurierbares Feld in der Benutzeroberfläche, exportieren Sie es und sehen Sie sich die Einstellungen dort an. Sie können die Einstellungen und andere Dinge immer fast 1: 1 aus den exportierten YAML-Dateien in ein PHP Array) kopieren.

6
Berdir

Sie können es auch mit ->setSetting('handler_settings',['target_bundles'=>['YOUR_CONTENT_TYPE_MACHINE_NAME'=>'YOUR_CONTENT_TYPE_MACHINE_NAME']] ) einstellen, Sie können ihm einen Mehrfachwert übergeben. ich meine

->setSetting('handler_settings',['target_bundles'=>['YOUR_CONTENT_TYPE_MACHINE_NAME1'=>'YOUR_CONTENT_TYPE_MACHINE_NAME1','YOUR_CONTENT_TYPE_MACHINE_NAME2'=>'YOUR_CONTENT_TYPE_MACHINE_NAME2','YOUR_CONTENT_TYPE_MACHINE_NAME3'=>'YOUR_CONTENT_TYPE_MACHINE_NAME3']] )

Die endgültige Lösung für Ihren Fall lautet also:

$fields['project_id'] = BaseFieldDefinition::create('entity_reference')
      ->setLabel(t('Project'))
      ->setDescription(t('The project ID, transaction was created for.'))
      ->setSetting('target_type', 'node')
      ->setSetting('handler', 'default')
      ->setSetting('handler_settings',['target_bundles'=>['project'=>'project']] )
      ->setDisplayOptions('view', array(
        'label'  => 'hidden',
        'type'   => 'project',
        'weight' => 0,
      ))
      ->setDisplayOptions('form', array(
        'type'     => 'entity_reference_autocomplete',
        'weight'   => 5,
        'settings' => array(
          'match_operator'    => 'CONTAINS',
          'size'              => '60',
          'autocomplete_type' => 'tags',
          'placeholder'       => '',
        ),
      ))
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);
6
Yusef