a-blog cms で、ログインできなくなる理由

佐野

佐野 2013年12月25日

「a-blog cms」にて、既存のHTMLをテーマ化するには、
「themes」フォルダの中に新規フォルダを作成し、
その中に、既存サイトのHTMLやCSS、
JavaScript等のファイル、ようするに丸ごと全部入れます。
次に、管理画面でテーマの選択項目に、
その新規作成したフォルダの名前が表示されるので、
それを選択するのですが・・・

じつは、これだけでは「404 NotFound」になります。
こうなると「(サイトのURL)/login」のように、
ログインURLを叩いても404のままログイン出来ずじまい。

今までこれが原因で、インストールのし直しとかしていたのですが、
最近ようやく原因がつかめてきました。

まず、テーマ選択で決定したテーマの名前は、データベースに保管されており、
「acms_config」テーブルの「config_key」カラムが「theme」の部分に入っています。
そして、それを何らかのデフォルトのテーマ名にすれば、元に戻す事が可能です。

それ以外にも、わざわざデータベースを触らなくても、
「site2014」などの他のテーマから、
「404.html」をコピーするだけで修正する事が可能です。

20131225133547

アクセスすると、このようなボタンが配置されたページが表示されます。

じつは正確には、ログイン状態ではあったのですが、
ログイン直後に飛ぶページが管理画面ではなく、テーマ化したHTMLファイルなため、
管理画面に入るためのリンクが、なくなってしまっていただけなんですね。
実際はログイン状態だったので、管理画面用URLを知っていれば、
それに直接アクセスして、管理画面で修正する事も可能です。

このような事がないように修正するには、
管理画面のURLを控えておくというのも手ですが、
「template.yaml」ファイルや、「テンプレートファイル」の値を、
ほとんどを「index.html」にしておくという手もあります
(トップページが「index.html」であること前提での話です)。

20131225144802

20131225144825

ただし、管理画面側にて、「管理ページ」項目の「admin.html」(デフォルト値)を
「index.html」に変更する事だけは、絶対にやめておいたほうがいいです。

もしこれを設定してしまうと、管理画面URLでアクセスしても、
通常の「index.html」ページが優先され、管理画面に入る事ができなくなってしまいます。
もし誤って変更した場合は、それこそデータベースで
「acms_config」テーブルの「config_key」カラムが「tpl_admin」の値を
「admin.html」に直接修正するか、
同じくデータベース内で、指定テーマをサンプルにして管理画面へ。
そこで自作テーマと「管理ページ」項目の設定を同時に行うかで修正できます。
どのみち、データベースをいじる事にはなるでしょう。

「template.yaml」ファイルは、他のテーマにも標準で置かれていますが、
これは、アクセスしたときのURLに応じて、
どのファイルに接続するかというのを決定するリストのようなものです。
トップページのURLでアクセスして「404」だったのは、
テーマ設定画面の「テンプレートファイル」の「トップページ」の項目が
「top.html」が標準で設定されており、
そのファイルがない事によるものだったわけです。

「テンプレート選択ファイル(template.yaml)の値を優先する」という項目もありますが、
これは「template.yaml」ファイルがない状態でチェックされていても、
最終的には、「テンプレートファイル」で設定された項目が選ばれるので、
今回の件では、直接関係はありません。

じつは、トップURLで「404」が出たとしても、
システム自体は壊れているわけではないため、
各ファイルにURLで直接アクセスすれば表示されます。

ただ、以上の設定をしても、
各ページに管理画面へのリンクがなければ、管理画面に入る事はできません。
つまりは、各ページに設置されたエントリー(a-blog cmsで言うブログ記事のようなもの)
などの要素が、ログイン時にはそのまま編集モードになり、
埋め込まれた他の要素も、ログイン時のみその機能が管理用に変化します。
このあたりは、ログインすればページをその場で直接編集できるので、
ログイン直後の画面は管理画面ではないという、
コンセプトの元に生まれた難点のように思えます。

とりあえずは、管理画面のURLをブラウザでブックマークしておくか、
とにかく「index.html」ファイルの冒頭に、
管理用のボタンのコードを他のテーマから取ってきて埋め込んでおくのが、
いいかもしれないですね。