it-swarm.com.de

Wie kann ich ein Entitätsbündel aus Typ und ID abrufen?

Ich muss bundle einer Entität anhand ihrer type und id identifizieren.

Wenn zum Beispiel type 'Knoten' und id 7 ist, kann ich 'Seite' als bundle erhalten.

Vielen Dank

11
Junaid

Verwenden Sie entity_load, Um die Entität wie von @Nikhil erwähnt zu laden.

Verwenden Sie dann entity_extract_ids , um das Bundle zu extrahieren. Beispiel:

$entity = entity_load('node', array('7'));

list(, , $bundle) = entity_extract_ids('node', $entity);

echo "Bundle name is : " . $bundle;

Die Funktion entity_extract_ids Gibt ein numerisch indiziertes Array (keine Hash-Tabelle) zurück, das die folgenden Elemente enthält:

  • 0: Primäre ID der Entität.
  • 1: Revisions-ID der Entität oder NULL, wenn $ entity_type nicht versioniert ist.
  • 2: Bundle-Name der Entität oder NULL, wenn $ entity_type keine Bundles enthält.

dabei sind 0, 1 und 2 Array-Indizes. Der von Core- und Contrib-Modulen verwendete Ansatz besteht jedoch darin, die Funktion list() zu verwenden.

11
AjitS

Hier ist das sauberste eine, die ich aus dem Modulcode für organische Gruppen erhalten habe.

$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();

Zum Beispiel kann ich es so nennen:

$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();

Bearbeiten: Wie @Clive hervorhob, hängt die obige Methode vom Entitätsmodul ab.

Hier ist eine andere Methode, die nicht von einem zusätzlichen Modul abhängt. Es wird hier erklärt https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW

Kopieren Sie das Einfügen dieser Methode:

function _entity_get_bundle($entity, $entity_type) {
  $info = entity_get_info($entity_type);
  if (empty($info['entity keys']['bundle'])) {
    return $entity_type;
  } else {
    return $entity->{$info['entity keys']['bundle']};
  }
}
7
Junaid

Wenn Sie in Bezug auf die Leistung eine sehr einfache Methode zum Abrufen des Knotentyps aus der Knoten-ID wünschen, können Sie eine einzelne Auswahlabfrage für die Knotentabelle verwenden.

$type = db_query("SELECT type FROM {node} WHERE nid = :nid", 
                  array(':nid' => $nid))->fetchField();

Auf diese Weise müssen Sie nicht das gesamte Entity-Hook-System mit entity_load usw. aufrufen.

Es handelt sich um eine einzelne Auswahlabfrage unter Verwendung der indizierten Knoten-ID.

3
David Thomas

Versuchen Sie entity_load

Laden Sie Entitäten aus der Datenbank.

Die Entitäten werden in einem statischen Speichercache gespeichert und erfordern keinen Datenbankzugriff, wenn sie während derselben Seitenanforderung erneut geladen werden.

Parameter

$ entity_type : Der zu ladende Entitätstyp, z. Knoten oder Benutzer.

$ ids : Ein Array von Entitäts-IDs oder FALSE, um alle Entitäten zu laden.

$ Bedingungen : (veraltet) Ein assoziatives Array von Bedingungen in der Basistabelle, wobei die Schlüssel die Datenbankfelder und die Werte die Werte sind, die diese Felder benötigen haben. Stattdessen ist es vorzuziehen, EntityFieldQuery zu verwenden, um eine Liste von Entitäts-IDs abzurufen, die von dieser Funktion geladen werden können.

$ reset : Gibt an, ob der interne Cache für den angeforderten Entitätstyp zurückgesetzt werden soll.

Rückgabewert

Ein Array von Entitätsobjekten, die durch ihre IDs indiziert sind. Wenn keine Ergebnisse gefunden werden, wird ein leeres Array zurückgegeben.

3
niksmac