記事への画像の貼り付け

記事への画像の挿入には「Wysiwyg Fields」モジュールを利用しています。

とても満足していましたが、あることに気がついてしまい。
今後、いつかDrupal8へとアップグレードするときになってそれが悩みの種になるのではないかと懸念しています。
 

Wysiwyg Fields Token 問題

それは、Body Data(本文)に挿入された画像は「Wysiwyg Fields」で生成されたTokenがそのまま保存されているということです。

DBのテーブル内をみるとこのWysiwyg Fields Tokenがそのままで本文内(body data)に保存されています。
記事を表示する際は、入力フィルターの「Wysiwyg Fieldsフィルター」によって、Wysiwyg Fields Tokenが画像のURLパスに変換される仕組みです。

もし、この先、「Wysiwyg Fields」モジュールが利用できなくなったとき、「Wysiwyg Fieldsフィルター」も一緒に使用できなくなります。
そうなると、記事を表示する際は、Wysiwyg Fields Tokenが変換できずにそのまま表示されてしまいます。
結果、画像は表示できません。

この「Wysiwyg Fields」モジュールが利用できなくなるタイミングは、まず、「Wysiwyg Fields」のメジャーバージョンが更新されサポートがされなくなったとき、さらには、Drupalのメジャーバージョンアップで「Wysiwyg Fields」がportされなかったときの2つが考えられます。
すでに、「Wysiwyg Fields」のバージョンは2.xになっていて、かつ、1.xから2.xへのアップグレードパスは存在しません。
また、Drupal8ではWysiwyg APIやCKEditorがコアに吸収されたりしていますので、Drupal8用の「Wysiwyg Fields」モジュールがportされなかったらD7 to D8のマイグレートもできなくなります。

やっちまった!

Wysiwyg Fieldsで画像を挿入した記事がどれくらいあるのか正確な数は把握していませんが、660エントリの半分以上はあると思います。
今後を考えるとbody dataにはStaticなパスを挿入するべきだったと後悔しています。

Wysiwyg ImagefieldからWysiwyg Fieldsへと使っているわけですが、当初は、FileFieldに正式対応しているモジュールが少なく、さらに期待通り操作するモジュールはごく限られていました。
その時ではベストだと思っていました。
 

Drupal 8へのアップグレード準備

まだまだアップグレードはできません。
D6 to D7のときと同じくメジャーバージョンアップの際には、コアに吸収された、コアから外れた、寄贈モジュールがない、プロジェクト名(モジュール名)が変わった、他のプロジェクトと合体したなどなど様々なケースがあるため、現在使用しているモジュールがアップグレード後に何になるのかを1つ1つ調査しなくてはなりません。
この面倒な作業をやらないとあとでもっと面倒なことになります。

Drupal 8へはDrupal 6およびDrupal 7からアップグレードできるパスが用意されています。
Upgrading from Drupal 6 or 7 to Drupal 8」にまとめられています。

簡単に方法を説明すると、

  1. Drupal8サイトを新規でインストールする
  2. migrate用モジュールを有効にする
  3. 必要なモジュールをインストールし有効にする
  4. Drupal8サイトから現行のDrupalサイトの「sites/default/files」(パブリックファイルの場合)にアクセスできるようにする。
  5. Drupal8サイトから現行のDrupalサイトのデータベースへアクセスできるようにする
  6. migrateの実行前確認
  7. migrateの実行

方法はUIとdrushの2通りがあります。
Drupal 8へのアップグレードでは現行Drupalサイトへは手を加えないようにはなっていますが、念のためバックアップは必要です。

UIの方法で6番まで試してみましたが、migrateできないモジュールが166個もあって、中断しました。
※一部、migrateツールはコアに含まれていますが、すべてを一括で完了できるほどまでではありません。

Drupal8へ移行するには使用モジュールは最小限にしたほうがうまくいく確率も高くなるだろうと、不要なモジュールをアンインストールしたりして整理していると、「Wysiwyg Fields」が動作しなくなりました。

また、やっちまった!

これでは画像の挿入が・・・
とりあえず「Insert」モジュールを使えばなんとかなるだろうと安易な考えでいます。
※この記事で画像の挿入を試しています。



※textareaがグレーになってしまい、ソースをいったん表示するとなおります。なんか刺激がいるようです。
※追記 たぶんなおりました。Wysiwygモジュールをunstableバージョンにしたのが原因のようです。

それよりも、今後のためにbody data内の「Wysiwyg Fields Token」をどうやって書き換えるのか?が重要です。
今あるアイディアは、「Node export」モジュールと「Feature」モジュールを利用する方法と「Node Transration」や「Content Transration 」(Field Transration)を利用する方法です。
でもそうすると挿入部の画像のコードを削除してもファイルは削除できません。

Drupal 8へはDrupal8での画像の挿入方法を決定したのち現在の方法からどう変換するのかを考えないといけません。
うーん、困った。


Drupal 8へのアップグレードのタイミングですが、Drupal 9が発表されるまではDrupal 7はサポートされるので、そう急ぐこともありません。
また、Migrateツールも日々改良されていっているようですが、まだまだな点が多く、個人的には早くて年末かなぁといった印象です。
 

Drupalバージョン

Drupal 7.x

モジュール

WYSIWYG WYSIWYG Fields CKEditor