CraftCMSのエントリフィケーション計画対応をする際に遭遇したエラー

公開

Craft CMS Advent Calendar 2024 2日目の記事です。仕事ではPowerCMS Xばかり使用していますが、このブログは2018年7月から「Craft CMS」で運用しています。動的CMSながらこのサイトではかなりパフォーマンスが良く、またUIやブログの書き心地も良いのでとても気に入っています。

さて、昨年BUNさんが記事にされた「Craft CMS のエントリフィケーション計画について | BUN:Log」を読み、対応を進めなければと考えていました。とはいえなかなか時間を割くことができず、とりあえず現状維持でCraft 5にアップデートしていました。

11月上旬に時間が合ったので、BUNさんの記事を参考にコマンドを実行しエントリフィケーション計画への対応を進めました。概ね記事通りだったのですが、最初は以下のようなエラーが発生し「あれれ?」となりました。

[ec2-user@ip-172-26-8-35 craft]$ sudo -u nginx php craft entrify/categories Blog
PHP Fatal error:  Uncaught Error: Class "Dotenv\Dotenv" not found in /var/www/vhosts/anothersky.jp/www/craft/craft:16
Stack trace:
#0 {main}
  thrown in /var/www/vhosts/anothersky.jp/www/craft/craft on line 16

「Dotenvが入っていないのか…?」と思ったのですが、そういうことでもなさそうで調べたところ「craft3 - Uncaught TypeError Dotenv Create on updating to Craft CMS 4 - Craft CMS Stack Exchange」という記事がヒット。古い記事なのですが、記載の通り下記の3ファイルについてサーバー上のファイルと最新版を比較したところ、内容が異なっていましたので最新版のファイルを上書きしました。

  • bootstrap.php
  • craft
  • web/index.php

再度php craft entrify/categoriesを実行したところ、変換は無事実行されました。Craft 3から使っているので、どこかでファイルを更新するタイミングがあったのでしょうか…?

[ec2-user@ip-172-26-8-35 craft]$ sudo -u nginx php craft entrify/categories Blog
Section name: Blog Category
Section handle: [blogCategory] 
Enable entry versioning for the section? (yes|no) [yes]:
Entry type name: [Blog Category] 
Entry type handle: [blogCategory] 
 → Saving the entry type … ✓
 → Saving the section … ✓

✅ Section created.

Enter the username or email of the author that the entries should have: Hideki

 → Converting “Webフロントエンド” (303) … ✓
 → Converting “Webサーバーサイド” (304) … ✓
 → Converting “アクセシビリティ” (305) … ✓
 → Converting “CMS” (306) … ✓
 → Converting “モバイルアプリ開発” (307) … ✓
 → Converting “Web制作全般” (308) … ✓
 → Converting “勉強会” (309) … ✓
 → Converting “デジタルデバイス” (310) … ✓
 → Converting “音楽” (311) … ✓
 → Converting “飛行機” (312) … ✓
 → Converting “旅行” (313) … ✓
 → Converting “写真” (314) … ✓
 → Converting “日記” (315) … ✓

✅ Categories converted.

 → Updating user permissions … ✓

Delete the “Blog” category group? (yes|no) [yes]:
 → Deleting category group … ✓

✅ Category group deleted.

Found one Categories field relating to the “Blog” category group.
Convert it to an Entries field? (yes|no) [yes]:
 → Converting “カテゴリ” … ✓

✅ Categories field converted.


💡 Run this command on other environments immediately after deploying these changes:
   
   php craft entrify/categories blog --section=blogCategory --entry-type=blogCategory --author=Hideki

[ec2-user@ip-172-26-8-35 craft]$ sudo -u nginx php craft entrify/categories blog --section=blogCategory --entry-type=blogCategory --author=Hideki


✅ Categories converted.

 → Updating user permissions … ✓

コンテキストにセットされている変数を確かめたい

カテゴリ・タグをエントリに変換したのでテンプレートの修正が必要ですが、例えばカテゴリ一覧テンプレートで現在表示しているページのカテゴリ名はどうやって取得すれば良いのだろう?と迷いました。

{% set title = 'カテゴリ「' ~ category.title ~ '」の記事一覧' %}

{% block mainContent %}
    <section>
        <h2>カテゴリ「{{ category.title }}」の記事一覧</h2>
        {% set filterdEntries = craft.entries.section('blog').relatedTo(category) %}

PowerCMS Xの感覚で「どこかにこのコンテキストの変数が入っているのだろうな」と思い変数をダンプしたいのですが、タグが分からず…。調べてみるとddを使えば良いようでした。

{% dd _context %}

変換後の使い心地

これまではタグを設定する際、数文字タイプして候補が出るのを一瞬待って選択する感じでしたが、エントリに変換してからはダイアログにタグ一覧が出て検索ができるのが便利だなと感じています。