私は複数のレベルの語彙を持っていますが、分類表示と同じように階層内のすべてのレベルを表示したいと思います。私の分類は次のようなものです。
All
Drinks
Alcohol Drinks
Beer
Vodka
Alcohol Free Drinks
Coca Cola
Pepsi
Fruits
Fruits For Losing Weight
Watermelon
Blackberrie
Fruits For Dogs
Strawberry
Orange
今私はコードを使用してこれをロードしようとしています。
$vid = 'food';
$terms =\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, 0, 1, FALSE);
foreach ($terms as $term) {
$term_data_1[$term->tid] = $term->name;
$terms_2 =\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $term->tid, 1, FALSE);
foreach ($terms_2 as $term_2) {
$term_data_2[$term_2->tid] = $term_2->name;
$terms_3 =\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $term_2->tid, 1, FALSE);
foreach ($terms_3 as $term_3) {
$term_data_3[$term_3->tid] = $term_3->name;
}
}
$term_data_1[$term_2->tid] = $term_data_2;
$term_data_1[$term_3->tid] = $term_data_3;
}
kint($term_data_1);
そしてこのコードは次のような結果を与えます
階層内の用語を取得するための助けが必要です。
TermForm.php には、これを行う方法の例があります。
基本的には、ツリーをループして、用語の深さに応じてダッシュを追加します。
使用できる例は次のとおりです。
$options = [];
foreach (\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid) as $item) {
$options[$item->tid] = str_repeat('-', $item->depth) . $item->name;
}
UPDATE:ネストされた用語の配列が必要な場合は、次のようにすることができます。
$result = [];
foreach (\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid) as $item) {
$parents = array_reverse(\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadAllParents($item->tid), TRUE);
$r = &$result;
foreach ($parents as $k => $v) {
if (isset($r[$k])) {
$r[$k] = array_replace($r[$k], [$k => $v->label()]);
}
else {
$r[$k] = [$k => $v->label()];
}
$r = &$r[$k];
}
}
これは、用語がネストされているレベルの数に関係なく機能します。
データの格納には多次元配列を使用する必要があります。
$vid = 'tags';
$terms =\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, 0, 1);
$termDataAll = [];
foreach ($terms as $term) {
$termDataAll[$term->tid]["tid"] = $term->tid;
$termDataAll[$term->tid]["name"] = $term->name;
$terms_2 =\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $term->tid, 1);
foreach($terms_2 as $term_2){
$termDataAll[$term->tid][$term_2->tid]["tid"] = $term_2->tid;
$termDataAll[$term->tid][$term_2->tid]["name"] = $term_2->name;
$terms_3 =\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $term_2->tid, 1);
foreach($terms_3 as $term_3){
$termDataAll[$term->tid][$term_2->tid][$term_3->tid]["tid"] = $term_3->tid;
$termDataAll[$term->tid][$term_2->tid][$term_3->tid]["name"] = $term_3->name;
}
}
}
dpm($termDataAll);