定期開催のイベントサイトを作る際のブログ設定
a-blog cms のユーザーアイコンは、何も設定しないと user0.png 〜 user9.png で uid の下一桁で 10色のアイコンが自動で振られます。ユーザーの管理画面でアイコンを設定する人も少なくデフォルトのアイコンのままってことが多いんじゃないかと思ったりする部分を識別しやすいように自動でアイコンが設定されたらいいなって思って今回のカスタマイズ「Gravatarのアイコンを反映してみる」という事にチャレンジしてみました。
Wikipedia によると
Gravatar(グラバター)は、サイトを越えて利用できるアバターを作成できるサービス。トム・プレストン・ワーナーが開発した。2007年にAutomatticが買収し、ブログのプラットフォームであるWordPress.comに統合されている。
と書かれている。いつ作られたがかかれてないですが、今は WordPress.com のアカウントと統合されているのかな?
歴史を感じますね。私の SNSアイコンは 3世代あり、それがこの Gravatar には登録されているようです。 (今のヤツ、ルップルちゃん付き、mixi にも設定されているアイコンの順)
ちょっと説明を全部書くのが難しそうなので、demo@beginner でテーマを用意してみました。まずはダウンロードください。
管理画面の左側のアイコン部分になります。
(エントリー作成)ボタンの上にあるアイコン部分の設定になります。
ユーザー一覧のアイコンのテンプレートになります。
ユーザー詳細ページのアイコンのテンプレートになります。少し悩むのが、Gravatar のものなのかを表示させることができないことです。苦肉の策として、Gravatar のアイコンの時には画像を削除するチェックボックスを表示させないようにしました。この画像は消せないという意味になります。
themes_system__layout のディレクトリにある admin.html は、themes/system/_layout を上書きするようにファイルになります。
3.0.28 のファイルに @section を追加しています。 将来的には今後のバージョンに入ったらいいなって思って @extends するように書いています。
Gravatar はメールアドレスを md5 で変換した文字列を利用します。 a-blog cms のログインユーザーのメールアドレスは %{SESSION_USER_MAIL} で表示は可能ですが、このメールアドレスを md5 で変換しないといけないので、%{SESSION_USER_MAIL_MD5} のようなものをオリジナルグローバル変数を作成します。
hook.php の最初の方に
use ACMS_RAM;
を書いて、
public function extendsGlobalVars(&$globalVars) { if ( SUID ) { $globalVars->set('SESSION_USER_MAIL_MD5', md5(ACMS_RAM::userMail(SUID))); $globalVars->set('GRAVATAR',"true"); # この行を消すと Gravatar 利用しないようになります } }
とする事で、メールアドレスを md5ハッシュ化することができます。
kazumich@appleple.com が 28f266d6006293d4b53e365e3f3b57ee になります。
ついでに %{GRAVATAR} に true を設定しておいて、場合によってはこの部分を消すとテンプレート上で Gravatar を使わない設定になるように IFブロックを書いてあります。
extension/acms/Hook.php をカスタマイズする場合には以下の設定 HOOK_ENABLE を 1 に設定を変更する必要があります。
define('HOOK_ENABLE', 1);
上記の実装をコピーすると、Gravatar のアイコンが表示されるようになります。会員制サイトなどには、効果のある実装になるのではないかと思います。 次にリリースする Ver. 3.1 では会員制サイトの機能のテコ入れをしていますので、もしかするとコレも標準的な実装になるかもしれませんね。
Ver. 3.1 で themes_system__layout/admin.html の修正分が反映されることになりました。
今回は多店舗展開をしているウェブサイトで新店を追加する際にできるだけ簡単にサイトの設定を完了させるための設定を考えてみます。
bid | URL | ブログ名 |
---|---|---|
1 | https://www.appleple.com/ | HOME |
2 | https://www.appleple.com/shop/ | ショップ一覧 |
3 | https://www.appleple.com/tokyo/ | 東京店 |
4 | https://www.appleple.com/osaka/ | 大阪店 |
初期の状態としては上記のようになります。 URL は架空のもので実際には 404 です。 ここに bid:5 https://www.appleple.com/nagoya/ 名古屋店を追加していきます。
ここで問題になりそうなのは、このコンフィグセットを「店舗用」を選択する 必要がある事です。このコンフィグセットを選択せず「デフォルト」のままだった際には正しいテーマが設定されず blog テーマになってしまったり店舗用のコンフィグが設定されない事になります。
こうならないようにするためには「店舗追加時の設定マニュアル」を用意する必要が出てきます。できる事なら、このようなマニュアルは作らずに運用できるようにしたい。
店舗一覧が表示される https://www.appleple.com/shop/ の時に上記を表示させます。
themes/*作成しているテーマ*/admin/action.html を
@extends("/admin/_layouts/action.html") @section("extra") <!-- BEGIN_IF [%{BID}/eq/2] --> <form action="/bid/2/admin/blog_edit/" method="post" class="acms-admin-form"> 新規店舗: <input type="text" name="name" value="" placeholder="ショップ名"> <input type="hidden" name="blog[]" value="name"> <input type="text" name="code" value="" placeholder="shopname"> <input type="hidden" name="blog[]" value="code"> <input type="hidden" name="config_set_id" value="1"> <input type="hidden" name="blog[]" value="config_set_id"> <input type="hidden" name="status" value="open"> <input type="hidden" name="blog[]" value="status"> <input type="hidden" name="domain" value="%{DOMAIN}"> <input type="hidden" name="blog[]" value="domain"> <input type="hidden" name="indexing" value="on"> <input type="hidden" name="blog[]" value="indexing"> <input type="submit" name="ACMS_POST_Blog_Insert" value="店舗作成" class="acms-admin-btn-admin acms-admin-btn-admin-primary" onclick="javascript:return confirm('新規店舗子ブログを追加します。よろしいですか?')"> </form> <!-- END_IF --> @endsection
こんな感じに設定します。4.5行目の 2 は /shop/ の ブログID になりますので、環境によって変わってきます。また、13行目の name="config_set_id" value="1" についても、店舗用のコンフィグセットID が 1 なのでこのような設定にしてあります。
誰にでも思いつく簡単な管理画面の実装になります。 a-blog cms の管理画面のカスタマイズは、簡単な HTML をどう書くかだけになります。
https://www.appleple.com/shop/ のカテゴリー設定で、
CID | カテゴリー名 | カテゴリーコード | グローバル化 |
---|---|---|---|
3 | お知らせ | news | チェック |
4 | スタッフ紹介 | staff | チェック |
5 | アクセス | access | チェック |
のように設定をするとします。 a-blog cms の グローバル化 のチェックは下層の子ブログで利用できるようにする設定 になります。店舗毎に自由にカテゴリーを設定するのではなく、店舗毎のブログの1つ上の階層でカテゴリーを作ることで子ブログを作成するだけで、https://www.appleple.com/nagoya/news/ という「お知らせ一覧」のページを作ることができるようになります。
このグローバルカテゴリーがあることで、上の階層で店舗の news をまとめた一覧を表示させることが簡単に行うことができます。
a-blog cms の設定をコンフィグと呼び、その設定はブログ単位に設定をすることができます。その設定に名前をつけて複数管理したり、その設定を共有したりすることができるのが「コンフィグセット」です。
このコンフィグセットができた事から、同じ設定を複数の子ブログで設定が楽になったりしていますが、1つしかコンフィグを利用しないような時にも現在は、このコンフィグセット管理の画面を表示させて「このブログの初期コンフィグ」をクリックして「コンフィグ管理」の画面を表示させる必要があります。
以下の 3つを行うことで実現が可能になる。
これらの実装を考える際には、3つのファイルをカスタマイズします。この実装をする際にやるべき事は「このブログの初期コンフィグ」以外の行が無い時に「コンフィグ管理」にリダイレクトするということです。
コンフィグセット管理 | http://localhost/bid/1/admin/config_set_index/ |
コンフィグ管理 | http://localhost/bid/1/admin/config_index/ |
themes/system/admin/config/set/index.html を自分のテーマの中に移設して修正します。使ってるモジュール名は Admin_Config_Set_Index というもののようです。
<!-- BEGIN_IF [<!-- BEGIN_MODULE Admin_Config_Set_Index --><!-- BEGIN config_set:loop -->{name}<!-- END config_set:loop --><!-- END_MODULE Admin_Config_Set_Index -->/em] --><!-- BEGIN_SetRendered id="redirect" --><meta http-equiv="refresh" content="0; URL=%{HOME_URL}bid/%{BID}/admin/config_index/"><!-- END_SetRendered --><!-- END_IF-->
どこでもいいので、このページの中に上記の1行を追加してみましょう。
という流れで1つ目のファイルの修正が完了です。
テーマの中に admin.html があれば、それを無かったら themes/system/admin.html を自分のテーマの中に移設して修正します。
@section("admin-meta") @parent <!-- GET_Rendered id="redirect" --> @endsection
これで、コンフィグセット管理のテンプレートを表示した時の SetRendered id="redirect" があったら、その部分がこちらに移動してきます。
結果、リダイレクト処理が動くことになります。
この状態だと、コンフィグセットが作れなくなってしまうのでコンフィグ管理のテンプレートファイル themes/system/admin/config/index.html にボタンを追加します。ボタン自体は themes/system/admin/config/set/index.html にあるものをそのまま持ってきたらいいでしょう。
<!-- BEGIN_MODULE Touch_SessionWithAdministration --> <form action="" method="post" class="acms-admin-margin-bottom-small clearfix"> <input type="hidden" name="bid" value="%{BID}" /> <input type="hidden" name="admin" value="config_set_edit" /> <input type="hidden" name="edit" value="insert" /> <input type="hidden" name="query[]" value="edit" /> <button type="submit" name="ACMS_POST_2GET" class="acms-admin-btn acms-admin-btn-success acms-admin-float-right"> <!--T-->コンフィグセットの作成<!--/T--> </button> </form> <!-- END_MODULE Touch_SessionWithAdministration -->
位置は、お好みで構いませんが、</header> の下くらいがいいでしょう。
これで、今回のコンフィグセットが作られていない時に、管理画面の「コンフィグセット管理」の画面を1つ飛ばして「コンフィグ管理」を表示させるカスタマイズは完了です。
a-blog cms の管理画面のカスタマイズは、簡単にテンプレートファイルを修正することで可能です。カスタマイズする人次第で管理画面は自由にカスタマイズが可能です。皆さんの a-blog cms は、どんなカスタムを行ってますか?