チェックをつけたエントリーの情報をCSVでダウンロードするには

エントリーの一覧に表示されている情報からチェックボックスにチェックをつけたものだけをダウンロードするにはどうしたら? という事を相談され、簡単に実装できるだろうと思ったのですが、a-blog cms の URLコンテキストで複数の EID を処理することができず詰んでしまいました。その方法を考えてみます。

今回は、エントリーカレンダーモジュールでの一覧を表示させています。

1件を選択する場合 input type="radio"

まずは簡単な1件を出力する用のラジオボタンでの実装を考えてみます。


拡張アプリ Slack を公開しました


今年、2018年3月26日に公開された a-blog cms Ver.2.8ではより外部サービスと連携しやすい仕組みを用意しています。そこで今後いくつかの連携機能をa-blog cmsの本体とは別に拡張アプリという形で配布することにしました。 その第一弾として今回は 拡張アプリ「Slack」を用意しました。拡張アプリ「Slack」を使うとお問い合わせフォームなどから送信された内容をSlackに通知することができます。たとえばフォームから「資料請求」などがあれば「資料請求がありました。」などの簡単なメッセージや、メールの本文をそのまま、好きなチャンネルに通知できます。

ダウンロード

ダウンロード

利用するためにはダウンロード後、/extension/pluginsに設置してください。

使い方

以下の3つのステップで a-blog cms と Slack を連携します。

  1. Slackへの登録
  2. Webhook URL の取得
  3. a-blog cmsの拡張アプリ Slackに Webhook URL を登録

1. Slackへの登録

Slackのアカウントをお持ちでない方は下記のURLにてアカウントを作成しましょう。ある程度の機能までは無料で使うことができます。 https://slack.com/

2. Webhook URL の取得

下記のURLにてチャネルを指定して Webhook URL を取得します。ここで登録したチャネル以外のチャネルにもメッセージを飛ばすことはできますので好きなチャネルを指定して作成しましょう。 https://slack.com/services/new/incoming-webhook

3. a-blog cmsの拡張アプリ Slackに Webhook URL を登録

管理ページ > 拡張アプリより「拡張アプリ管理」のページに移動します。そのページより下の図のようにSlackをインストールします。



インストール完了後は、管理ページ > フォーム > 連携したいフォームID よりSlackの管理ページに移動します。その後、「Webhook URL」という項目がありますので、その項目に先ほど覚えておいた Webhook URL を入力します。

あとは、Slackに通知したいフォームIDに移動し、メッセージの送信先チャネルを「Channel」に送信元の名前を「From」に設定します。またメッセージにはフォームモジュールの変数と、グローバル変数を使用することができます。 「Message」の項目にはグローバル変数やフォーム内の変数も利用することができます。



これでa-blog cmsとSlackを連携させる準備は整いました。あとは先ほどの設定がされたフォーム「お問い合わせフォームなど」に移動し普段通り情報を入力します。



お問い合わせ完了後、以下のようなメッセージがSlackに通知されていれば成功です。



注意

config.server.phpでHOOKを有効にしておく必要があります。

define('HOOK_ENABLE', 1);

拡張アプリの今後の配布について

拡張アプリは今後 applepleのGitHubのページに公開していく予定です。 またGitHubに公開されているアプリは下の拡張アプリ一覧ページからダウンロードできるようになりますのでよかったら訪れてみてください。


拡張アプリ一覧ページ

グローバル変数の作り方

※この記事の内容は2015年11月に開催された a-blog cms Training Camp 2015 Autumn の中で行われたグローバル変数の作り方講座の内容です。

グローバル変数

グローバル変数は、テンプレートに記述することで、表示中のページが持つ情報を出力します。テンプレート上、モジュールやインクルードよりも先に処理されます。
利用できるグローバル変数の一覧

検索機能で使用されるフルテキスト

a-blog cmsでは、検索窓や、URLコンテキストでのkeywordを使った検索、モジュールIDの設定でも検索ワードを指定したりと、検索機能に対応しております。この時に検索対象となるテキストデータをフルテキスト(fulltext)と呼んでいます。

検索時には、フルテキストのデータを対象にしますので、もしもDBのエントリータイトルなどを直接変更しますと、エントリータイトルと、フルテキストの中のエントリータイトルが違う状態になり、検索時のヒットに影響がでますので注意が必要です。

次に、フルテキストのデータとして扱われる項目についてまとめます。

エントリーのフルテキストとして対象になるデータ

a-blog cms で どこどこ.jpを使用してみる


IPから地域を判別して表示するコンテンツを制御してみる

今回は、どこどこ.jpというサービスを使い、アクセスしている地域により表示するコンテンツを制御してみたいと思います。

例えば、制作会社一覧ページにアクセスした時にアクセスしている県で絞り込んで表示しています。

制作者会社一覧

IFブロック利用事例の紹介

ver2.0からの機能、IFブロックの利用事例を紹介します。
IFブロックの説明についてはドキュメントページを参考にしてください。

モジュールの変数を使う例

<!-- BEGIN_MODULE Category_EntryList id="clinicTop" -->
 <!-- BEGIN categoryEntryList:loop -->
 <!-- BEGIN category:loop --><!-- BEGIN entry:veil --><!-- BEGIN entry:loop -->
  
  <!-- BEGIN_IF [{entryCode}/eq/state.html] -->
  <p class="icon_camera">{entryTitle}</p>
  <!-- ELSE_IF [{entryCode}/eq/access.html] -->
  <p class="icon_pin">{entryTitle}</p>
  <!-- ELSE -->
  <p>{entryTitle}</p>
  <!-- END_IF -->
  
 <!-- END entry:loop --><!-- END entry:veil --><!-- END category:loop -->
 <!-- END categoryEntryList:loop -->
<!-- END_MODULE Category_EntryList -->

上記の例では、特定のエントリーコードの場合に、表示するアイコンを変えています。IFブロックを使わずに、カスタムフィールドにクラス名を登録し、それを表示するような方法も可能です。

<!-- BEGIN_IF [{url_a}{url_b}/nem/] -->
    <h2>リンク</h2>
    <!-- BEGIN url_a:veil --><p><a href="{url_a}" class="acms-btn">リンクA</a></p><!-- END url_a:veil -->
    <!-- BEGIN url_b:veil --><p><a href="{url_b}" class="acms-btn">リンクB</a></p><!-- END url_b:veil -->
<!-- END_IF -->

上記の例では、カスタムフィールド「url_a」「url_b」があり、どちらか一方でも値がセットされていれば表示されるようになっています。
{url_a}{url_b}と値をつなげて、nem(値が空ではない)かどうかを判断しています。
このように、複数のフィールドを文字列としてつなげて使うことも可能です。

また、nemのように比較対象がない記述は”{hoge}/nem”ではなく”{hoge}/nem/”と最後の/が必要になります。

<!-- BEGIN pager:veil -->
<div>
  <!-- BEGIN page:loop --><span <!-- BEGIN_IF [%{PAGE}/eq/{page}] -->class="itemPagerActive"<!-- END_IF -->>
  <!-- BEGIN link#front --><a href="{url}"><!-- END link#front -->{page}<!-- BEGIN link#rear --></a><!-- END link#rear -->
  </span><!-- END page:loop -->
 </p>
</div>
<!-- END pager:veil -->

上記の例では、今見ているページ(グローバル変数の%{PAGE})とページャーのページ番号(モジュール変数の{page})が一致した時だけクラスがセットされるようにしています。
グローバル変数をIFブロックに使うことができます、比較対象は必ずしも固定値である必要はなく、モジュール変数との比較にも利用できます。

<!-- BEGIN_IF [%{CID}/re/^(31|44)$] -->
<!-- END_IF -->

正規表現を使って、複数の値を許可する場合にも利用できます。

IFブロックの注意点

IFブロックはとても便利な機能ですが、いくつかのデメリットもあります。

メンテナンス性の低下

テンプレートファイルに直接条件を記入するため、FTPでテンプレートファイルを確認・変更できる方でないと修正ができません。サイト構築時には大きな問題ではありませんが、お客様での運用時に柔軟な調整ができません。
モジュールIDでの調整でしたら、管理ページから変更が可能です。

表示速度の低下

実行順序の関係で、IFブロックは最後に処理されます(これによって柔軟な条件分岐処理が可能になります)
そのため、テンプレート処理が一通り動いてから条件分岐処理が行われます。
例えば、エントリー一覧に出ている100件のエントリーからある1件だけを表示するような処理をIFブロックで行いますと、ページ表示には不要な99件のエントリーも一旦テンプレートに書きだされます。そのため表示速度は低下します。こういった用途でのIFブロックの利用はお勧めできません。

親、ルートテーマへのグローバル変数の実装について

a-blog cmsユーザーの方から、%{CURRENT_THEMES_DIR} :表示中ページで使用されているテーマのパスを表すグローバル変数、がありますが、これの親ブログ版、ルートブログ版が欲しいといった要望を頂いております。

親、ルートテーマへのグローバル変数の実装について

a-blog cmsユーザーの方から、%{CURRENT_THEMES_DIR} :表示中ページで使用されているテーマのパスを表すグローバル変数、がありますが、これの親ブログ版、ルートブログ版が欲しいといった要望を頂いております。