Wo finde ich die Vokabel-ID ($ vid)?

24

In Drupal 6 würde ich zum Taxonomiebereich von my / admin gehen und in der Lage sein, das $ vid (numerisch) in der URL zu finden.

In Drupal 7 (zweifelsohne aufgrund der Einführung von Begriffen als Entitäten) ist die URL nicht mehr so ​​ausführlich (und einige würden sagen, sauberer), da sie jetzt den Computernamen (Bündelnamen?) Des Vokabulars anzeigt, wie er in zu sehen ist admin/structure/taxonomy/my_vocabulary/edit.

Mein Ziel ist es, taxonomy_get_tree ($ vid, $ parent, $ max_depth, $ load_entities) zu verwenden, um mein Vokabular zu laden und auf prächtige und reichliche Weise damit zu arbeiten. Leider akzeptiert diese Funktion keinen machine_name, bevorzugt aber vermutlich den numerischen Namen $vid.

Ich akzeptiere Alternativen zum Laden eines vollständigen Vokabularbaums (dh alle Begriffe und ihre Beziehungen zueinander), denke aber, dass diese Frage für zukünftige Generationen direkt von Google beantwortet werden sollte.

electblake
quelle
Nur eine Vermutung, aber ein Entwicklungsmodul?
Jeremy Französisch

Antworten:

10

Nach Manu können Sie, wenn Sie über einen Drush-Zugriff auf die Befehlszeile verfügen, Folgendes tun:

drush php-eval '$ tax = taxonomy_vocabulary_machine_name_load ("main_site_structure"); echo $ tax-> vid;'
Robin van Emden
quelle
woa, ich hätte nie gedacht, dass es keine Lösung gibt :) danke, dass du diese Frage & Antwort gewürzt (und erweitert)
hast
1

Ich verwende entity_load () , um mein Vokabularobjekt zu laden und dessen $ vid zu erhalten.

Der Trick besteht darin, falsefür den 2. Parameter (der ist $ids) zu übergeben und dann auf die taxonomy_vocabularyTabelle in Ihrer MySQL-Datenbank zu verweisen, um zu sehen, was Sie als Bedingungen übergeben können. Ich habe mich für das entschieden, machine_namewie Sie unten sehen können:

$ids = false;
$conditions = array('machine_name' => 'my_vocabulary');
$vocab = entity_load('taxonomy_vocabulary', $ids, $conditions);

Wenn Sie einen schnelleren / leichteren Weg kennen, dann bieten Sie ihn bitte hier an :)

electblake
quelle
1
Verwenden Sie EntityFieldQuery. $ -Bedingungen sind veraltet und eingeschränkter.
Bojan Zivanovic
und so sind sie :) Möchten Sie eine vollständige Antwort einreichen? Wenn nicht, schätze ich, werde ich hier etwas einreichen, um diese Frage zu vervollständigen / zu schließen.
Electblake
1

Sie können die {taxonomy_vocabulary}Tabelle in der Datenbank manuell untersuchen und dann die vidSpalte überprüfen .

sumaiya
quelle
1

In D7

Wenn Sie lediglich die Vokabel-ID (vid) benötigen und den Computernamen kennen, können Sie Folgendes verwenden:

$query = db_select('taxonomy_vocabulary', 'tv');
$query->fields('tv', array('vid'));
$query->condition('tv.machine_name', __VOCAB_MACHINE_NAME, '=');
$result = $query->execute();
$data = $result->fetchAssoc();
$vid = $data['vid'];

Kleine Leistungssteigerung: ~ 0,0036489963531494 Sekunden auf ~ 0,00030779838562012 Sekunden.

Dies könnte natürlich nach Bedarf angepasst werden. Ändern Sie einfach den Zustand, um welche Informationen Sie haben.

Ryanka
quelle
0

Dies ist zu laden mit Entity-Feld-Abfrage als Bojan Erwähnung:

$query = new entityFieldQuery();
$result = $query
  ->entityCondition('entity_type', 'taxonomy_vocabulary')
  ->propertyCondition('machine_name', 'my_vocabulary')
  ->execute();

if (empty($result['taxonomy_vocabulary'])) {
  return;
}

$vocabularies = taxonomy_vocabulary_load_multiple(array_keys($result['taxonomy_vocabulary']));
dpm($vocabularies);
Roy Segall
quelle
0

Dies war für mich der schnellste Weg, eine Liste aller Vokabel-IDs über Drush zu sehen:

  1. Stellen Sie mit dem Drush-Befehl eine Verbindung zu Ihrer Datenbank her
    drush sqlc
  2. Geben Sie an der Eingabeaufforderung von mysql Folgendes ein
    Wählen Sie * aus taxonomy_vocabulary;
peezy
quelle