概要
ニュースサイト等で一つの記事が複数ページに分かれているものをDrupal8で対応してみました
※プログラミングコードは使用しませんが、手順が長いです
※Viewsとノードの基礎的な使い方が分かっている方が対象になります
準備
必要なモジュール
インストール
composer require drupal/ds
composer require drupal/paragraphs
drush en ds paragraphs
モジュールの説明
Paragraphsモジュール
Paragraph typeというフィールドのセットを作成し、自由度の高いフィールドを作成することができます
Display Suiteモジュール
エンティティ(ノードやユーザー等)の表示管理を拡張することができます
ノードページでブロック等を表示させることもできるようになります
手順
パラグラフタイプを用意
Paragraphsモジュールでページ分割に対応するフィールドを作成します
サイト構築のParagraphs types(/admin/structure/paragraphs_type
)に移動します
Add Paragraph Typeでパラグラフタイプを作成します
ラベルは「本文(複数ページ)」等、てきとうに設定しましょう
パラグラフタイプを作成したらパラグラフタイプ内にフィールドを追加していきます
フィールドを追加で作成できます
今回は例として、本文入力用の長文テキストフィールド、次へリンクのテキストを入力するテキストフィールドの二つを作成します
表示管理で作成した本文フィールドのラベルを非表示、次へフィールドを非表示にします
コンテンツタイプの設定
今回はデフォルトで用意されている「記事」を使用します
コンテンツタイプの記事でフィールド管理に移動します
フィールドの設定ページで作成したパラグラフタイプを選択して設定を保存しましょう
Viewsで表示を分割させる
Viewsで作成したパラグラフフィールドを分割して表示させます
まずViewsでブロックを作成します
コンテクチュアルフィルター
高度な設定のフィルターにコンテンツのIDを追加します
デフォルトの値を指定を選択し、「URLから取得したコンテンツID」を設定します
リレーションシップ
高度な設定のリレーションシップから、パラグラフフィールドのリレーションシップを設定します
フィールド
パラグラフタイプ内の本文フィールドを追加します
これはそのまま保存してください
パラグラフフィールドのデルタを追加します
表示から除外にチェックを入れ、区切りをなしに設定します
結果の書き換えで数値を1大きくします
{% set delta = delta + 1 %}{{ delta }}
コンテンツへのリンクを追加します
表示から除外とOutput the URL as textにチェックを入れます
結果の書き換えで?page=
にデルタを設定します
{{ view_node }}?page={{ delta }}
パラグラフタイプ内の次へを追加します
結果の書き換えで先ほど作成したコンテンツのリンクをリンクパスに設定します
{{ view_node }}
フィルターの条件
なしで大丈夫です
掲載のフィルターも削除してください(非掲載の際に表示されなくなってしまいます)
並び替え基準
ページャー
ページャーを設定します
Display Suiteの設定
サイト構築のDisplay Suite(/admin/structure/ds
)からFieldsタブに移動します
Add a block fieldでDisplay Suiteのアイテムを追加します
エンティティにNodeを選択します
Blockに先ほど作成したViewsのブロックを選択します
コンテンツタイプの表示設定
記事の表示設定(/admin/structure/types/manage/article/display
)に移動します
ページ下の「レイアウトを選択」で「One Column」を選択して一旦保存します
パラグラフフィールドとは別に「本文(複数ページ)」が使用できると思うので、それを表示するように設定します
これは、先ほどDisplay Suiteで追加したViewsのブロックです
これで一つのノードで複数ページに分割して表示する設定は完了です
表示の確認
「記事」を新規作成して、実際の表示を確認してみましょう
パラグラフフィールドに1ページ分ずつ文章を入力します
上手く設定ができていれば、複数のページに跨って表示されています
次へリンクやページャーはそのままだと味気ないので、CSSなどで調整しましょう