2020-05-29

記事のまとめをできるようにしてリンクを表示できるようにしてみる #craftcms

@tinybeans の ColorfulBox へ Craft CMS をインストールしようの記事をよく読む。

カラフルボックスで始める - はじめての Craft CMS (3) 「Craft CMS のインストール」 | Craft CMS | かたつむりくんのWWW
https://tinybeans.net/blog/201...

あんな感じで連載というか、何回ものの記事を書いた時にまとめてリンクを出せたらどうだろう?ということで試してみた。

新たにセクションを追加

まとめ記事用のセクション(series)を追加する。

このセクションのフィールドにはブログ記事(articleセクション)のエントリを選択するフィールドを追加。

これでまとめ記事側からエントリを選ぶ形でできそうな感じ。

ブログ記事でまとめ記事を選択する

ブログ記事を書いた時にそこからまとめ記事に追加したり、新たにまとめ記事を作ってまとめたいこともあるだろうという気がしたので、article セクションにもまとめ記事セクションのエントリを選択するフィールドを追加。

articleの入力タイプにこのフィールドを配置。
これでブログ記事からまとめ記事の選択、作成ができる。

新たにまとめ記事のエントリを作成する。

作成したまとめ記事のエントリで、ブログ記事を選択していく。

まとめ記事が選択された状態になる。


この辺の記事選択の話は以前カテゴリを使った場合の話を書いた。

テンプレートの調整

あとはテンプレートを調整していく。

以前関連付けられたエントリが取りやすくなった話は書いた。

テンプレートとしてはこんな感じで。

{% set entries = craft.entries.section("series").c_relation_article([entryId]).all() %}
{% for seriesEntry in entries %}
<div class="card my-3">
  <div class="card-header"><h3>{{seriesEntry.title}}</h3></div>
  {% set seriesEntries = seriesEntry.c_relation_article %}
  {% for seriesEntry in seriesEntries %}
    {% if loop.first %}<ul class="list-group">{% endif %}
    <li class="list-group-item"><a href="{{seriesEntry.url}}">{{seriesEntry.title}}</a></li>
    {% if loop.last %}</ul>{% endif %}
  {% endfor %}
</div>
{% endfor %}

記事ページの entry.identryId にセットされている前提で、まずはまとめ記事セクションのエントリのうち、記事選択(c_relation_article)で自記事を選択しているエントリを取り出す。

そのまとめ記事セクションのエントリを seriesEntry としてループする。

そのまとめ記事エントリの記事選択フィールドで選択しているエントリを seriesEntries として取り出して、それをループして回していく、という感じ。


3.4が出た時のとかをまとめてみたりした。

なんかあまり使わない気がしなくもないけど、試してみた、という感じで。