プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

2.5 -> 3.4 へのマイグレーション

このHPはJoomla!で運用しているのですが、Joomla! の 2.5系は昨年度でサポートが切れてしまいました。で、早めに3.x系にアップグレードしたいと思っていたのですが、先日やっと作業ができたので、そのときのメモをまとめておきます。なお、基本的には、https://docs.joomla.org/Joomla_2.5_to_3.x_Step_by_Step_Migration に載っている手順のとおり作業しているので、気になった点だけを書いておきます。

 

準備1

最初に、動作条件を確認しておきます。technical requirements for Joomla 3 を見てください。マイグレーション後の3.4の条件をみてみると、PHPのバージョンが5.4以上が推奨です。現状は5.2だったのでこの部分が不十分でした。

このHPは、さくらインターネットのレンタルサーバーを使っているので、コントロールパネルにログインして、PHPバージョンの設定を行い、5.4を選択しておきました。念のため、バックアップサーバーで5.4に切り替えてしばらく運用して問題ないことを確認してから、本番サーバー側を切り替えてます。いきなり切り替えてひどい目に会わないようにお気をつけください。

 

準備2

あと、準備としては、3.xに対応していないふるいテンプレートを事前に削除しました。

実は、最初にマイグレーションを試した際、これをやっていなかったらテンプレート管理画面で下記画像のようになり、ひどいことになりました。

まあ、文字化けは置いておいて、管理画面のレイアウトが崩れてしまったのには驚きでした。

で、この場合の対応策としては、How to fix Fatal error message in Template Manager にあるように古いテンプレートを削除すればOKです。が、もう一つ落とし穴があり、古いテンプレートは、このリンク先のページの下部にあるように、『エクステンション管理』→『管理』で選択しようとしても、表示されないため削除できない場合があります(2.5の時点でもメニューに表示されない場合あり)。

このような場合は、サーバーにログインし、 joomla/templates にある該当テンプレートのフォルダをまるごと削除してしまいます。なお、削除対象のテンプレートを使用中ですと、ひどいことになると思いますので、くれぐれもお気をつけください。

後は、『エクステンション管理』→『探す』画面でキャッシュをクリア(または条件を指定せずに再検索)しておけば、これらのテンプレートの情報が表示されることがなくなると思います。

 

準備3

エクステンションを必要に応じてアップデートしておきます。少なくともインストール済みのエクステンションは3.x対応になっている必要があります。

マイグレーションガイドには最新にしろ、とあるし本来はそれのほうがトラブルは少ないのでしょう。ただ、今回は、エクステンションのバージョンが大きく異なるため、設定内容や機能に差異があったりして、アップデート後の確認や設定作業が煩雑になるのが嫌だったので、いくつかのエクステンションは既存バージョンのままとしました(現在のバージョンでも3.xに対応していることは確認済みです)。

 

手順

あとは、、https://docs.joomla.org/Joomla_2.5_to_3.x_Step_by_Step_Migration に載っている手順のとおりに進めます。

基本的にこのとおりで問題ないのですが、私の環境だと、『コンポーネント』メニューに『Joomla!の更新』が表示されませんでした。これに対しては、 Joomla Update Missing in from Admin Menu にあるようにデータベースを直接操作することで解決しました。

あ、あとasset table の修正もしてないです( Fixing the assets table に従ってDBテーブルを調べると、たしかにいくつかのレコードは『壊れた』状態になっていました。どこかの機会に修正したいですが、当面先になりそうです)。

手順どおりに進めると、特に問題もなく3.4にマイグレーションできました。

 

不具合への対応

 さて、マイグレーション後、どういう理由かは不明ですが、いくつかの設定が変わっていましたので、それを修正しました。今回は次のようなトラブルがありました。

  1. メインメニューの順番が勝手に入れ替わる
  2. 検索ボタンのボタンに『検索』という文字が表示されなくなる(スマート検索ではなく、通常のメニューアイテムの検索です)
  3. 一部のテンプレートで、親カテゴリ名が表示されるようになった
  4. カテゴリブログの表示形式が、指定した表示方法と異なる
  5. サブカテゴリの表示形式で、順序なし一覧の先頭の画像が表示されなくなった
  6. artisteer 4.1 までで作成したテンプレートは、タグ機能表示にバグがあり、タグが表示されない

これらのうち、後半3つは現状のままでもよいとしました(自分のサイトにとっては今のところ特に大きな問題でもないので)。特に、最後の6.のテンプレートに対応しようとすると、artisteer 4.2 以上を購入する必要があるので、タグ機能を使うときまで待つことにします(artisteer については Artisteer による Joolma! テンプレートの作成 を参照)。

1.については、メニュー設定を修正することで対応しました。

 

3.については、テンプレート(および関連するメニューアイテムの設定)等は一切変更しておらず、メニューアイテムのオプションも『標準設定を使用』になっていたのに、2.5のときと挙動が異なるようになりました。もっとも、グローバル設定の『記事』→『記事』タブにある『親カテゴリを表示』が『表示』になっていたので、今までの2.5で表示されなかったことのほうがおかしいという考え方もできますね。いずれにしても、これに対しては、グローバル設定側で親カテゴリを表示しないようにして、問題解決です。

 

で、一番やっかいだったのが、2.の問題です。検索モジュールなら、ボタンテキストを指定する項目があるのですが、メニューアイテムの検索にはそんなものがありません。

Joomla!が生成したhtmlを見てみると、最初から

<button class="btn hasTooltip art-button" title="" onclick="this.form.submit()" name="Search" data-original-title="検索">
<span class="icon-search"></span>
</button>

となっており、テキストが入力されていません(2.5のときのコードを見るときちんとテキストが入ってました。span要素のクラス名をみてもわかるように、テキストで表示するという考え方ではなくなったんでしょうね)。

直接、この部分を生成しているphpファイルを修正することも考えましたが、今回は、cssのbefore擬似要素を使って、テキスト文字を表示することにしました。

.icon-search::before {
    content: "検索";
}

もっともこれだと、日本語にしか対応できないので微妙ですね。Gantry のテンプレートを使った場合の検索ページを見ると、この部分は、FontAwesome を使って、アイコン風の文字を表示するようにしていました。本当はこうするのがいいんでしょうね。

 

ま、こういう微妙な修正も含めてですが、一応これで3.4へのマイグレーションが完了です。