it-swarm.com.de

Zugriff auf benutzerdefinierte Taxonomie-Feldwerte (Drupal 7)?

Ich habe der Taxonomie ein neues Vokabular hinzugefügt und dann mehrere benutzerdefinierte Felder zu diesem neuen Vokabular hinzugefügt. In der Tabelle taxonomy_term_data werden die Werte für die Felder tid, vid, name, description, format und weight angezeigt. Es sieht auch so aus, als ob es jetzt einige neue Tabellen in der Datenbank gibt, die sich auf die neuen benutzerdefinierten Felder beziehen, die ich für das neue Vokabular erstellt habe (d. H. Field_data_field_taxonomy_cip_code). Die Werte in der neuen Tabelle sind entity_type, bundle, deleted, entity_id, revision_id, language, delta, field_taxonomy_cip_code_value und field_taxonomy_cip_code_format. An der Oberfläche ist nichts zu sehen, was es mir ermöglichen würde, die beiden Tabellen miteinander in Beziehung zu setzen.

Wie würde ich vorgehen, um die zusätzlichen benutzerdefinierten Feldwerte zusammen mit den neuen Vokabularwerten abzurufen?

3
cmmsites

Wenn ich Ihre Frage verstehe, sollte sich taxonomy_term_data.tid auf like field_taxonomy_cip_code_value.entity_id beziehen. In Drupal 7 Taxonomie-Begriffe sind jetzt Entitäten.

Entitäts-IDs und Bundle-Werte in der Datenbank sind normalerweise die Datenbankschlüssel, die zum Zuordnen von "Feldern" zwischen Tabellen verwendet werden (as drupal "Fields" kann über mehrere Bundles hinweg wiederverwendet werden).

0
tenken

Wenn Sie den Taxonomiebegriff mit taxonomy_term_load () laden, erhalten Sie jedes benutzerdefinierte Feld, das Sie dem Vokabular hinzugefügt haben.

Ich habe ein Vokabular erstellt, zu dem ich ein boolesches Feld (field_test_boolean) hinzufüge. Ich habe diesem Vokabular einen Taxonomiebegriff hinzugefügt und dann den folgenden Code ausgeführt. (22 ist die Taxonomiebegriff-ID für den von mir erstellten Taxonomiebegriff.)

$taxonomy_term = taxonomy_term_load(22);
dsm($taxonomy_term);

Die von dsm() gezeigte Ausgabe ist die folgende.

screenshot

Wenn Sie den Feldwert für die aktuell für das Feld festgelegte Sprache erhalten möchten, sollten Sie den folgenden Code verwenden.

$values = field_get_items('taxonomy_term', $taxonomy_term, 'field_test_boolean');

Wenn Sie die Taxonomiebegriffe suchen müssen, für die das benutzerdefinierte Feld bestimmte Werte enthält, sollten Sie die Klasse EntityFieldQuery verwenden.

  $query = new EntityFieldQuery();
  $entities = $query->entityCondition('entity_type', 'taxonomy_term')
    ->entityCondition('bundle', 'fields_test')
    ->fieldCondition('field_test_boolean', 'value', 1, '=')
    ->execute();

  if (!empty($entities['taxonomy_term'])) {
    $taxonomy_terms = taxonomy_term_load_multiple(array_keys($entities['taxonomy_term']));
  }

Hinweis

Wie in einem Kommentar festgestellt, gibt es einen Fehler, bei dem die Klasse EntityFieldQuery nicht für Taxonomiebegriffe verwendet werden kann. Der Code scheint im Entwicklungs-Snapshot Drupal 7) behoben zu sein, aber Drupal 7.14 ist vom Fehler betroffen.

8
kiamlaluno

@kiamlaluno ist richtig. Und damit können Sie die Felder mit ihrer Entität in der Datenbank verbinden mit:

SELECT td.* FROM taxonomy_term_data td
INNER JOIN field_data_field_taxonomy_cip_code f ON f.entity_id = td.tid AND f.entity_type = 'taxonomy_term'

Taxonomiebegriffe sind Entitäten und ihre tid ist ihre entity_id und der entity_type ist taxonomy_term.

0
zwirbeltier