インストール
composer require 'drupal/book:^2.0'
概要
Bookモジュールは、複数のノードを階層的な構造でまとめた「ブック」を作成・管理するための機能を提供します。この階層構造は「ブックアウトライン」と呼ばれ、章、セクション、サブセクションなど最大9階層の深さまでサポートします。
ブックは、サイトリソースガイド、マニュアル、FAQ、教材、Wikiなどの構造化されたマルチページコンテンツの作成に適しています。任意のコンテンツタイプをブックに追加でき、1つのブックに複数のコンテンツタイプを含めることが可能です。
ブックに含まれるページには、前後のページへのナビゲーションリンクと親ページへのリンクが自動的に表示されます。また、ブック全体を印刷用に最適化されたHTML形式でエクスポートする機能も備えています。
Drupal 11.2ではコアから分離されコントリビュートモジュールとなりましたが、セキュリティカバレッジは継続されています。
Features
- 階層的なブックアウトラインの作成と管理(最大9階層まで対応)
- 任意のコンテンツタイプをブックページとして使用可能
- コンテンツタイプごとに許可する子ページタイプを設定可能
- 自動生成される前/次/親ページへのナビゲーションリンク
- ブックナビゲーションブロックによるサイドバーメニュー表示
- ブックまたはページ単位での印刷用HTML出力機能
- 子ページ・兄弟ページの追加リンク(フルビュー表示時)
- ドラッグ&ドロップによるブック構造の並べ替え
- Drupal 6/7からのマイグレーションサポート
- 多言語対応(言語ごとにブック構造を管理)
- Search API連携用のブックフィールドプロセッサー
- Views引数デフォルトプラグイン(トップレベルブックID取得)
- ブックに基づく条件プラグイン(ブロック表示条件など)
Use Cases
オンラインマニュアルの作成
製品マニュアルやユーザーガイドを階層構造で作成できます。章、セクション、サブセクションを持つドキュメントを作成し、前後ページナビゲーションで読者がスムーズにコンテンツを閲覧できます。印刷用バージョン機能でマニュアル全体をPDF化するためのHTML出力も可能です。
FAQ(よくある質問)サイト
カテゴリー別に整理されたFAQを作成できます。トップレベルにカテゴリーを配置し、各カテゴリー下に個別の質問と回答ページを追加する構成が可能です。ブックナビゲーションブロックにより、関連する質問へのアクセスが容易になります。
教育コース・カリキュラム
オンラインコースの教材を章立てで構成できます。コース全体をブックとして作成し、各章やレッスンを子ページとして追加します。受講者は前後ナビゲーションでレッスンを順番に進められます。
社内Wikiナレッジベース
部門ごとや業務分野ごとに構造化されたナレッジベースを構築できます。複数のブックを作成し、それぞれを独立したドキュメントセットとして管理できます。「兄弟ページを追加」機能で、関連ドキュメントを素早く追加できます。
APIドキュメント
APIリファレンスドキュメントを体系的に整理できます。概要、認証、各エンドポイントの詳細を階層構造で配置し、開発者が必要な情報を見つけやすい構成を実現できます。Search API連携でブック内検索も強化できます。
Tips
- ブックの目次を自動生成するには、ViewsでブックIDをコンテキストフィルターとして使用し、深度でソートした一覧を作成します。
- 多言語サイトでは、各言語でブック構造が独立して管理されます。翻訳ワークフローと組み合わせて使用してください。
- 大規模なブック(100ページ以上)ではキャッシュ設定を最適化し、パフォーマンスを維持してください。
- ブックナビゲーションブロックの「ブックページのみに表示」モードを使用すると、不要なページでの表示を避けられます。
- Search API連携を使用すると、ブックの階層構造を活用したファセット検索が可能になります。
- Oliveroテーマを使用している場合は、book_oliveroサブモジュールを有効にしてテーマとの統合を改善してください。
Technical Details
Admin Pages 7
/admin/structure/book
サイト内のすべてのブックを一覧表示し、各ブックの編集や削除を行います。ブックの順序とタイトルの編集、ブック全体の削除操作が可能です。
/admin/structure/book/settings
ブックに使用できるコンテンツタイプと、各コンテンツタイプの子ページとして許可するタイプを設定します。また、ブックリストのソート順やラベルの切り詰め設定も行えます。
/admin/structure/book/{node}
ブック内のページの順序を変更したり、タイトルを編集したりできます。ドラッグ&ドロップで階層構造を変更できます。
/node/{node}/outline
ノードのブックアウトライン設定を変更します。どのブックに属するか、親ページ、重みなどを設定できます。
/node/{node}/child-ordering
ノードの子ページの順序を変更できます。ブックページのみで利用可能なタブです。
/book
サイト内のすべてのブックの一覧を表示するフロントエンドページです。デフォルトでは無効になっています。
/book/export/{type}/{node}
ブックまたはブックページを印刷用HTML形式でエクスポートします。ページとそのすべてのサブページが1つのドキュメントとして表示されます。
権限 8
Hooks 10
hook_node_load
ノード読み込み時にブック情報をノードに添付します。
hook_node_presave
ノード保存前に新規ノードのブックリンクをリセットします。
hook_node_insert
ノード挿入時にブックアウトラインを更新します。
hook_node_update
ノード更新時にブックアウトラインを更新します。
hook_node_predelete
ノード削除前にブックからエントリを削除します。
hook_node_view
ブックナビゲーションをノード表示に追加します。
hook_node_links_alter
ブックページに「子ページを追加」「兄弟ページを追加」「印刷用バージョン」リンクを追加します。
hook_form_node_form_alter
ノード編集フォームにブックアウトラインフィールドセットを追加します。
hook_entity_type_build
ノードエンティティタイプにブック関連のフォームクラスとリンクテンプレートを追加します。
hook_entity_extra_field_info
ブック対応コンテンツタイプにbook_navigationエクストラフィールドを追加します。
Troubleshooting 6
「管理 > サイト構築 > ブック > 設定」でそのコンテンツタイプがブック使用可能として選択されているか確認してください。また、ユーザーに「コンテンツと子ページをブックに追加」パーミッションがあるか確認してください。
1) コンテンツがブックに追加されているか確認 2) 表示管理でbook_navigationフィールドが有効になっているか確認 3) ブックナビゲーションブロックを使用する場合は、ブロックレイアウトで適切なリージョンに配置されているか確認してください。
1) ノードをフルビュー(node/X)で表示しているか確認 2) 「コンテンツと子ページをブックに追加」パーミッションがあるか確認 3) 最大深度(9階層)に達していないか確認 4) そのコンテンツタイプの子タイプが設定されており、作成権限があるか確認してください。
印刷用バージョンは対象ページとそのすべてのサブページをレンダリングするため、大規模なブックではリソースを大量に消費します。必要に応じてPHPのメモリ制限やタイムアウト設定を調整するか、Book PDFなどの専用モジュールの使用を検討してください。
「管理 > サイト構築 > ブック > 設定」で「新しい親セレクターJavaScriptライブラリを使用」オプションを切り替えてみてください。JavaScriptエラーがある場合はブラウザコンソールを確認してください。
Drupal 6/7からのマイグレーション後は、「管理 > サイト構築 > ブック」で各ブックの構造を確認してください。親リンクIDの不一致がログに記録される場合があります。必要に応じて手動で構造を修正してください。
Security Notes 4
- 「ブックを削除」パーミッションは制限付きです。このパーミッションを持つユーザーはブック全体とそのすべての子ページを削除できるため、信頼できるユーザーにのみ付与してください。
- 「ブック設定の管理」パーミッションも制限付きです。サイト全体のブック動作に影響するため、管理者にのみ付与することを推奨します。
- 印刷用バージョン機能は非公開コンテンツを露出させる可能性があります。アクセス制御がブックの各ページに適用されていることを確認してください。
- ブックにはノードアクセス制御が適用されます。ブック構造は表示権限のないノードを含む場合でも、ユーザーがアクセス権を持つノードのみが表示されます。