web-dev-qa-db-ja.com

ブックナビゲーションツリー全体を表示する

私の質問は、本のナビゲーションツリー全体をブロックで表示する方法についてです(Drupal 8)

@oknateのおかげで トップレベルの本を表示するBook Navigationブロックを使用できます 、しかし、ツリー全体が必要です。 (目次を考える)

以下のすべての例は、あなたが3レベルのディープブックのトップページであると想定しています。

また、 https://github.com/petergus/alt-book-nav.gitに作業モジュールがあります

書籍のナビゲーションブロックにタイトル(トップレベル)の書籍を表示するには、book/src/Plugin/Block/BookNavigationBlock.phpの次のコードを置き換えます(もちろんカスタムモジュールを使用)。

 // Only show the block if the user has view access for the top-level node.
  if ($nid) {
    $tree = $this->bookManager->bookTreeAllData($node->book['bid'], $node->book);
    // There should only be one element at the top level.
    $data = array_shift($tree);
    $below = $this->bookManager->bookTreeOutput($data['below']);
    if (!empty($below)) {
      return $below;
    }
  }

     if ($nid) {
        $tree = $this->bookManager->bookTreeAllData($node->book['bid'], $node->book);
        return $this->bookManager->bookTreeOutput($tree);
      }

ただし、トップレベルと子レベルしか表示されないので、どのページからでもツリー全体を表示できるようにしたいと考えています。

私はdrupal 8で完全に新しく、PHPであまり便利ではないので、

     $tree = $this->bookManager->bookTreeAllData($node->book['bid'], $node->book);
     kint($tree);

本の名前と第1レベルのみを返し、

     $tree = $this->bookManager->bookTreeAllData($node->book['bid']);
     kint($tree);

$node->bookなし)は、複数のレベル、つまり複数の「下」配列を返します。

enter image description here

その情報をブロックに引き込む方法を私は知りません、誰か?

上記のように、@ oknateが https://github.com/petergus/alt-book-nav.git で提案したモジュールがあります。

どんな助けにも感謝し、この質問がコミュニティに役立つことを願っています。

2
petergus

私はすでに質問の回答を投稿しましたが、テスト中になんとかそれを逃しました!

$tree = $this->bookManager->bookTreeAllData($node->book['bid'], $node->book);から, $node->bookを削除すると、展開されたツリー全体が印刷されます。

誰かが ユーザーフォームオプションを追加するモジュール に追加する時間がある場合、最終的に多くの人に利益をもたらし、drupal.orgリポジトリにアクセスできます。

1
petergus