URLコンテキストの基本
URLコンテキストによって表示ページの出力を制御
a-blog cmsでは、表示しているページがWebサイトの何処なのか、どのような状態であるかをURL上のパスとして表現しています。これを URLコンテキスト(URLによって表現されるページの文脈情報)と呼んでいます。個々のモジュールは、このURLコンテキストで表す条件を元に何を表示するかを決定する事になります。
a-blog cmsでは、表示しているページがWebサイトの何処なのか、どのような状態であるかをURL上のパスとして表現しています。これを URLコンテキスト(URLによって表現されるページの文脈情報)と呼んでいます。個々のモジュールは、このURLコンテキストで表す条件を元に何を表示するかを決定する事になります。
a-blog cms には、カレンダーを表示するためのモジュールがいくつか用意されています。本ハンズオンでは「Entry_Calendar」「Plugin_Schedule」「Entry_Summary」を使ったカレンダーを作りましょう。用途に合わせて使い分けてください。
Entry_Calendar はカレンダーの中にエントリーを表示するモジュールです。イベントやセミナーなどの詳細ページに誘導したい時に適しています。
Entry_Calendarの特徴はエントリーのカスタムフィールドを利用できることです。 たとえば、エントリーのカスタムフィールドに日付の情報を保存し、Google Calendarに登録するためのリンクを表示するといったカスタマイズができます。
11月のエントリーを Entry_Calendar で表示してみましょう。まずは11月を公開日時にしてエントリーを複数件登録してください。
まずは Entry_Calendar 用のモジュールIDを作りましょう。今回の例では「demoEntryCalendar」というモジュールIDを作成します。 URLコンテキストがカレンダーに反映されるように「開始日時」にチェックを入れてください。
モジュールIDの設定画面
つぎに、Entry_Calendarモジュールの表示設定画面で、カレンダーの表示モードが「月表示」モードになっていることを確認しましょう。「週表示」モードだと1週間分のカレンダーが表示されます。
最後に作成したモジュールIDを使ったカレンダーを実際に表示してみましょう。ご利用のテーマに「calendar.html」を新たに作成し、上記のZipファイルを展開して添付されているHTMLを設置してみましょう。
次にカレンダーに表示するための情報を登録できるようにエントリーにカスタムフィールドを設置しましょう。(ソースコードが少し長いので、上記ZIPファイルをご活用ください)
モジュールIDの設定で開始日時のチェックボックスにチェックが入っていると、10月や12月など他の月のカレンダーも閲覧が可能です。
「Plugin_Schedule」はカレンダーに登録した情報を自由に表示できます。エントリーカレンダーと異なり、エントリーを作る必要がなく、管理画面ひとつで一ヶ月分の情報を制御できるので、休業日カレンダーなどに適しています。
「Plugin_Schedule」のサンプル
まずは管理画面のスケジュールよりスケジュールを作成します。今回は「demoSchedule」という名前でスケジュールを設定しています。
つぎに「定休日」用のラベルを作成しましょう。Plugin_Scheduleでは、日にちごとにラベルをつけ、カレンダー上で異なる見た目にできます。
今回はラベル名を「定期休業」、クラス名を「regular_holiday」としています。
ラベルを用意できたら、管理画面>スケジュールの登録データの「表示」ボタンをクリックしてください。下の図のように、スケジュールのデータ詳細ページが表示されます。先ほど設定した「定期休業」のラベルを任意の日付に登録していきます。
まずは「Plugin_Schedule」のモジュールIDを作りましょう。今回の例では demoPluginSchedule という名前でモジュールIDを作成しています。
モジュールIDの作成が完了したら、モジュールIDの表示設定に移動し、先ほど作成したスケジュール「demoSchedule」を参照先スケジュールとして登録してください。
以下のような七曜表が表示されていれば、カスタマイズは完了です。ラベルのクラスにスタイルを当ててデザインを実装してください。
エントリーサマリー(Entry_Summary)とグローバル変数を組み合わせて、特定の期間を登録されているコンテンツを絞り込んで表示できます。
このハンズオンは「グローバル変数の作成」が含まれるので、難易度★★★★☆に相当します。余力のある方のみチャレンジしてみてください。
まずは、以下のグローバル変数を作成します。
| %{EVENT_THIS_WEEK_FROM} | 「今週の開始日」をあらわすグローバル変数 |
|---|---|
| %{EVETN_THIS_WEEK_TO} | 「今週の最終日」をあらわすグローバル変数 |
| %{EVENT_NEXT_WEEK_FROM} | 「来週の開始日」をあらわすグローバル変数 |
| %{EVENT_NEXT_WEEK_TO} | 「来週の最終日」をあらわすグローバル変数 |
グローバル変数をphpから作成するために、「config.server.php」の HOOK_ENABLE を 1 に設定してください。Hookが有効になります。
define('HOOK_ENABLE', 1);
つぎに、/php/ACMS/User/Hook.php のextendsGlobalVarsのfunction内に、以下のプログラムを追加してください。これで上記のグローバル変数がセットされます。
public function extendsGlobalVars(&$globalVars)
{
if (date("D")=="Mon") {
$globalVars->set('EVENT_THIS_WEEK_FROM', date("Y-m-d"));
} else {
$globalVars->set('EVENT_THIS_WEEK_FROM', date("Y-m-d", strtotime('last monday')));
}
if (date("D")=="Sun") {
$globalVars->set('EVENT_THIS_WEEK_TO', date("Y-m-d"));
} else {
$globalVars->set('EVENT_THIS_WEEK_TO', date("Y-m-d", strtotime('next sunday')));
}
$globalVars->set('EVENT_NEXT_WEEK_TO', date("Y-m-d", strtotime('+2 sunday')));
$globalVars->set('EVENT_NEXT_WEEK_FROM', date("Y-m-d", strtotime('next monday')));
}
グローバル変数のくわしい作成方法は開発ブログをご覧ください。
次に今週と来週のイベント情報を表示するために、Entry_SummaryのモジュールIDを作成しましょう。先ほど作ったグローバル変数を利用し、下記のような条件で2つのモジュールIDを作成します。
| モジュールID | フィールド(field) |
|---|---|
| event_this_week | event_date/lte/event_date/lte/%{EVENT_THIS_WEEK_TO}/and/event_end_date/gte/%{EVENT_THIS_WEEK_FROM} |
| event_past | event_date/lte/%{EVENT_NEXT_WEEK_TO}/and/event_end_date/gte/%{EVENT_NEXT_WEEK_FROM} |
モジュールIDの引数には、グローバル変数を使えます
これで、期間ごとにコンテンツを絞り込んで表示できる Entry_Summary ができました。スタイルやカスタムフィールドを調整すれば、以下のようなテンプレートができます。
サンプルのソースコードを用意しましたのでダウンロード後、任意のディレクトリに設置し、ファイルをincludeして表示を確認してください。意図した期間でエントリーが表示されていればOKです。
URLコンテキスト上で指定されたページやキーワードの指定を、各モジュールが反映するかどうかは、各モジュールの引数の設定によって変わります。
またデフォルトの設定値もモジュールによって異なります。たとえば、Entry_Bodyモジュールは、ページやキーワードを反映しますが、Entry_Summaryモジュールはそれらをデフォルトでは反映しません。
ページやキーワードを反映させるには、モジュールIDを設定します。 モジュールIDの設定画面に「キーワード(keyword)」「タグ(tag)」「ページ(page)」などURLの値を参照するチェックボックスがあります。
http://ドメイン/page/2/
上記のようにa-blog cmsではURLの値を参照してモジュール側でpageの2ページのデータを表示してくれます。
URLコンテキストを理解する上でa-blog cms の基本テンプレートの概念は欠かせません。 基本テンプレートには以下の3種類が存在します。
ひとつずつ詳しく説明します。
一般的な運用として Webサーバのドキュメントルートに a-blog cms が設置された場合には、「http://ドメイン/」というURLでトップページが表示されます。
また、トップページはブログごとに存在できるので、子ブログでもトップのテンプレートを表示可能です。
<!-- ルートブログのトップのテンプレートが表示される場合 --> http://www.example.com/ <!-- 「recruit」という子ブログのトップのテンプレートが表示される場合 --> http://www.example.com/recruit/
また、個別のディレクトリ内にa-blog cmsを設置することも可能です。その際には、設置先のディレクトリ(下記の例では、http://www.example.com/cms/)まで指定した状態がシステムとしてのトップページという扱いになります。
<!-- 「cms」というディレクトリ以下にa-blog cmsが設置されている場合。ルートブログのトップのテンプレートが表示される --> http://www.example.com/cms/
URLがスラッシュで終わっている状態のとき、トップページ以外の場合、一覧ページが表示されます。
<!-- 「news」がカテゴリーなら一覧のテンプレートが表示される --> http://www.example.com/news/ <!-- 「/」で終わっているが「recruit」がブログの場合はトップのテンプレートが使用される --> http://www.example.com/recruit/
など
注意点としては、URLコンテキストの特徴として、URLからはコンテンツがブログなのかカテゴリーなのか分からないことです。今適用されているテンプレートを知りたいときはテーマとテンプレートの構成の「表示テンプレートの確認」項目をご覧ください。
URLが 「.html」 で終わる場合は、エントリーの詳細ページが表示されます。
http://www.example.com/news/entry-1.html
本規約において使用する用語の意義は、次の各号に定めるとおりとします。
(1)「本規約」とは、「a-blog cms 利用規約」をいいます。
(2)「その他の規程」とは、本サイト上でアップルップルが定める、本規約以外の本ソフトウェアに関するその他の規程をいいます。
(3)「本契約」とは、本ソフトウェアの使用に関するアップルップルと契約者との間のソフトウェアライセンス契約をいいます。
(4)「アップルップル」とは、有限会社アップルップルをいいます。
(5)「契約者」とは、アップルップルとの間で本契約を結び、本ソフトウェアを使用する者をいいます。
(6)「使用者」とは、本規約に基づき契約者から本ソフトウェアの使用を認められた者をいいます。
(7)「本ソフトウェア」とは、アップルップルがライセンスを販売する「a-blog cms(エーブログ・シーエムエス)」という名称のソフトウェア及びこれに関するマニュアル等のドキュメント類をいいます。
(8)「本ライセンス」とは、本ソフトウェアの使用についてアップルップルから許諾を受ける権利をいいます。
(9)「ライセンスファイル」とは、本ソフトウェアをインストールするために必要となるファイルをいいます。
(10)「本サーバー等」とは、契約者が本ソフトウェアをインストールする先の、契約者管理に係るサーバー(契約者が契約するクラウドサーバーを含みます。)又はコンピューターをいいます。
(11)「本サイト」とは、本ソフトウェアの情報等を掲載したアップルップルが運営する a-blog cms 公式サイトをいいます。
(12)「登録」とは、アップルップル所定の手続きにより契約者として登録することをいいます。
(13)「登録事項」とは、契約者が登録をする際に登録するアップルップル所定の情報をいいます。
本ソフトウェアに関する、特許権、実用新案権、意匠権、商標権、著作権、不正競争防止法上の権利、その他一切の財産的若しくは人格的権利は、全てアップルップルに帰属します。本契約は、本ソフトウェアに関するアップルップルの上記各権利の譲渡を意味するものではなく、また、前条(使用許諾)に明示的に許諾されている範囲を超えて、その使用、利用、実施等を許諾するものではありません。
契約者は、次の各号に定める行為を行ってはなりません。
(1)本ソフトウェアを本規約に明示された内容及び限度を超えて使用すること
(2)第8条(表示)に違反すること
(3)本ソフトウェアを法令、公序良俗又は商慣習に違反する目的又は態様で使用すること
(4)本ソフトウェアをアップルップル又は第三者の権利を侵害する目的又は態様で使用すること
(5)本ソフトウェア対して、リバースエンジニアリング、逆コンパイル、又は逆アセンブラ、その他本ソフトウェアを解析しようと試みること
(6)本ソフトウェア又は本ライセンスを第三者に対して、貸与、譲渡、売買、担保提供、その他一切の処分をすること
(7)本ソフトウェアから派生するソフトウェアを開発、公開、貸与、譲渡、売買、担保提供、その他一切の処分をすること
本契約は、期間の定めのない契約とし、本契約が終了(その理由は問いません。)するまでの間、有効とします。
契約者は、その理由を問わず本契約が終了した場合、直ちに、本サーバー等から、本ソフトウェアを消去し、以降、本ソフトウェアを一切使用しないものとします。本契約終了後も、本サーバー等に本ソフトウェアが存在する場合、契約者は本ソフトウェアを使用したものとみなします。
契約者は、アップルップルが求めた場合は、前項の消去を実施したことを証明するため、別途アップルップル所定の文書に所定の事項を記入し、アップルップルに提出するものとします。
アップルップルは、本契約終了後に契約者が本ソフトウェアを使用したことで契約者に生じた損害について、一切の責任を負いません。
契約者は、本ソフトウェアに関連してアップルップルが契約者に対して秘密に扱うことを指定して開示した情報について、アップルップルの事前の書面による承諾がある場合を除き、開示目的以外に使用せず、また、第三者に開示しないものとします。
アップルップルは、個人情報を、アップルップル所定の「プライバシーポリシー」に基づき、適切に取り扱うものとします。
本契約終了後も、第7条(知的財産権等)、第9条(保証及び責任の制限)、第13条(終了時の措置)、第14(紛争対応及び損害賠償)、第15条(秘密保持)、第16条(個人情報の取扱い)、第17条(本規約の変更)、第18条(連絡)、第19条(権利義務の譲渡)、本条(存続条項)、第21条(完全合意)、第22条(分離可能性)、第23条(準拠法)、第24条(管轄)、第25条(協議解決)は、引き続きその効力を有するものとします。
本規約は、本契約に係る当事者間の完全な合意を構成し、本契約の締結以前に当事者間でなされた本契約に関連する書面、口頭、その他いかなる方法による合意も、本規約に取って代わられます。
本規約の規定の一部が、法令又は裁判所により違法、無効又は不能であるとされた場合においても、当該規定のその他の部分及び本規約のその他の規定は有効に存続し、また、違法、無効又は不能であるとされた部分については、当該部分の趣旨に最も近い有効な規定を無効な部分と置き換えて適用し、若しくは当該部分の趣旨に最も近い有効な規定となるよう合理的な解釈を加えて適用します。
本規約の準拠法は、日本法とします。
本ソフトウェアに関連して契約者とアップルップルの間で紛争が生じた場合、名古屋地方裁判所又は名古屋簡易裁判所を第一審の専属的合意管轄裁判所とします。
本規約の解釈に疑義が生じた場合、または本規約の定めのない事項については、アップルップル及び契約者は、誠意をもって協議し解決するものとします。
以上
2009年6月23日 制定
2015年3月31日 改訂
2016年1月5日 改訂
2016年7月7日 改訂
2020年9月1日 改訂