カスタムユニットを使って「SVG ユニット」を作る方法

最近は SVG ファイルがサイト上でも使われるようになってきていますが、残念ながら a-blog cms の画像ユニットには SVG ファイルを扱うことができません。今回は、カスタムユニットを利用して「SVG ユニット」を作ってみましょう。

今回用意するカスタムユニット

カスタムユニットの実装には、1つだけ追加する方法(custom.html)と、複数設定する方法(extend.html)があります。今回は複数設定する方法での実装を行います。

カスタムユニット名:custom_svg

  • SVGファイル : {svg@path}
  • サイズを指定 : {svg_x} , {svg_y}

管理側のフォームの実装

カスタムユニットの HTML を書くには、カスタムフィールドメーカー に用意されている「カスタムユニット」のフォームから準備します。

ファイルの設置場所は /themes/*テーマ名*/admin/entry/unit/extend.html で、カスタムフィールドメーカーで作った HTML を <!-- BEGIN custom_svg --> 〜 <!-- END custom_svg --> で囲みます。


種類 タイトル フィールド名
ファイル SVGファイル svg_file
テキスト 横幅 svg_x
テキスト 縦幅 svg_y

extend.html

<!-- BEGIN custom_svg -->

 * カスタムフィールド タグ *

<!-- END custom_svg -->

管理ページの設定

コンフィグの3ヶ所の設定をおこないます。「アップロード許可ファイル拡張子」は、忘れがちになりますので注意してください。

ユニット追加ボタン

管理ページ > カスタマイズ管理 > コンフィグ > エントリー > 編集設定 > ユニット追加ボタン に「custom_svg」というモードを設定します。 ラベル部分は「SVG」とすることで(SVG)ボタンが追加されることになります。


ユニット設定

管理ページ > カスタマイズ管理 > コンフィグ > エントリー > ユニット設定 の画面の最後に何も設定していない空の「SVG」ユニットが用意されていますので、(SVG)のボタンを一度クリックして SVG ユニットを追加します。


アップロード許可ファイル拡張子

管理ページ > カスタマイズ管理 > コンフィグ > エントリー > 編集設定 >アップロード許可ファイル拡張子の項目に追記します。SVGファイルはテキストファイルになりますので、「テキストファイルのアップロードを禁止」のチェックボックスを外し、ドキュメントに「 , svg 」と追加します。


エントリー編集画面での確認

この段階で SVG カスタムユニットを追加して保存が可能かどうかをテストしてみましょう。ユニットに(SVG)ボタンが追加されていて追加すると、カスタムフィールドメーカーの HTML のままであれば、以下のようなフォームが表示されます。 まずは項目が正しく出るのを確認して、OKであればスタイル等の調整をしていきましょう。


表示側のテンプレートの実装

unit.html には、あらかじめ extend.html の include の記述が準備されていますので、指定の場所に extend.html を用意します。

/include/unit/extend.html

<!-- BEGIN unit#custom_svg -->
<img src="%{ARCHIVES_DIR}{svg_file@path}" width="{svg_x}" height="{svg_y}" alt="svg">
<!-- END unit#custom_svg -->

これで、正しく設定ができていれば SVG ファイルを表示が可能になります。縦横のサイズを設定してみたり、片側だけ設定してどのように表示になるかを検証してみてください。

画像ユニットと同等までのカスタマイズ

時間があれば、以下のような実装を試してみましょう。

配置、代替えテキスト、リンクなどを設定できるようにすると以下のようなフォームを作ることができるようになります。ここまで作って何かの時に使えるパーツとして持っておいてみては、いかがでしょうか。



/include/unit/extend.html

<!-- BEGIN unit#custom_svg -->
<div class="column-image-{svg_align}">
	<!-- BEGIN_IF [{svg_link}/nem] -->
	<a href="{svg_link}"><!-- END_IF -->
		<img src="%{ARCHIVES_DIR}{svg_file@path}"<!-- BEGIN x:veil --> width="{svg_x}"<!-- END x:veil --><!-- BEGIN svg_y:veil --> height="{svg_y}"<!-- END svg_y:veil --> alt="{svg_alt}">
		<!-- BEGIN_IF [{svg_link}/nem] -->
	</a>
	<!-- END_IF -->
</div>
<!-- END unit#custom_svg -->

Ver. 3.0.7 リリースのお知らせ


この記事では、2022年2月25日にリリースした Ver. 3.0.7 の修正内容について紹介いたします。

現在お困りの問題に該当する項目がありましたら、お早めにバージョンアップのご検討をお願いいたします。

Ver. 3.0.7 リリースノート

  • CMS-5858 UTSUWAのjsがbundle時にwarningが出ている問題を修正
  • CMS-5859 action.htmlのボタンにid属性を追加
  • CMS-5860 位置情報有効にするとブログ管理のページがPHPエラーで表示されなくなる問題を修正
  • CMS-5861 メディア機能でGif画像がアップロードできない問題を修正
  • CMS-5862 サマリー系モジュールで、カスタムフィールドが entryFieldブロックの中で表示できない問題を修正
  • CMS-5863 サマリー系モジュールで、関連エントリー機能 or PHP8でエラーが起きる可能性がある問題を修正
  • CMS-5867 Ver. 3.0 系でメールマガジンが送信できない、ダウンロードモジュールが動作しない問題を修正
  • CMS-5868 一括変更フィールド設定のツールチップのスタイル崩れ
  • CMS-5869 Siteテーマのアクセシビリティ改善
  • CMS-5870 検索結果の空ページに新規作成ボタンを設置
  • CMS-5876 APCu のキャッシュが 同空間の 他a-blog cmsのキャッシュと衝突する可能性を修正
  • CMS-5875 Entry_Summary系モジュールで、エントリのカスタムフィールドが entryFieldブロックの中でしか展開できない問題を修正
  • CMS-5873 ユーザー編集画面で、メルマガのチェックボックスが表示されない場合がある問題を修正
  • CMS-5882 Tag_Filterモジュールのコンフィグ「リンク」の設定値が反映されない問題を修正
  • CMS-5881 .htaccess の リダイレクト設定を調整
  • CMS-5879 beginnerテーマのフォームの初期バリデート設定が間違っている問題を修正
  • CMS-5883 ダッシュボードでログイン履歴が表示されない問題を修正
  • CMS-5880 User_GeoListがエラー発生して正常に動作しない問題を修正
  • CMS-5884 拡張アプリのアップデート時に他の拡張アプリのステータスがおかしくなる可能性がある問題を修正
  • CMS-5833 エントリー項目設定のサブカテゴリーの「選択肢を子カテゴリーに限定」設定が反映されずカテゴリーの設定をみてしまう問題を修正

主なリリースノートの詳細な内容

CMS-5876 APCu のキャッシュが 同空間の 他a-blog cmsのキャッシュと衝突する可能性を修正

詳細については下記のブログに記載されていますので、キャッシュの衝突にお困りの方は下記のブログをご一読ください。


CMS-5875 Entry_Summary系モジュールで、エントリのカスタムフィールドが entryFieldブロックの中でしか展開できない問題を修正

Ver. 3.0.7 以前のVer. 3.0系では、Entry_Summary系モジュールで loop を使用する際、entryFieldブロックで loop を囲まなければ展開できませんでした。

こちらを見直し、新バージョンでは entryFieldブロックなしでも loop が動作するよう修正しました。

旧式の記述
<!-- BEGIN entry:loop -->
<!-- BEGIN entryField -->
<!-- BEGIN hoge:loop -->
{hoge}
<!-- END hoge:loop -->
<!-- END entryField -->
<!-- END entry:loop -->
新式の記述
<!-- BEGIN entry:loop -->
<!-- BEGIN hoge:loop -->
{hoge}
<!-- END hoge:loop -->
<!-- END entry:loop -->

CMS-5833 エントリー項目設定のサブカテゴリーの「選択肢を子カテゴリーに限定」設定が反映されずカテゴリーの設定をみてしまう問題を修正

Ver. 3.0.7 以前は、コンフィグ/編集設定 内「エントリー項目設定」における、サブカテゴリー「選択肢を子カテゴリーに限定」が正常に機能しておりませんでしたが、今回バージョンで正しく設定できるよう修正しました。



最後に

この度はご迷惑をおかけしてしまい申し訳ございませんでした。該当する問題がありましたら、お早めにバージョンアップのご検討をお願いいたします。 また、迅速にご報告いただいたユーザーの皆さま、誠にありがとうございました。

今後もご報告いただいた内容に対して真摯に受け止め修正と改善を行ってまいりますので、よろしくお願いいたします。

Google スプレッドシート との連携機能


a-blog cms Ver.2.8.0より拡張アプリ「Google Sheets」を利用できるようになります。 a-blog cmsの拡張アプリ「Google Sheets」を使うとお問い合わせフォームなどで送信された内容をGoogle スプレッドシートで作成した任意のスプレッドシートの最後の行に追記することができます。

拡張アプリの導入

拡張アプリ一覧 より Google Sheets の拡張アプリをダウンロードし、zipファイルを解凍します。解凍したフォルダを /extension/plugins/に設置します。



そして、config.server.phpを1にし、拡張アプリからHook処理をかけられるようにします。

define('HOOK_ENABLE', 1);

CMSを設置したサイトにアクセスし、管理画面 > 拡張アプリの順にページを移動し、 Google Sheets をインストールします。


API連携の方法

以下の3つのステップで a-blog cms と Google スプレッドシート を連携します。

  1. ClientID JSON の取得
  2. ClientID JSON を CMS側に登録
  3. フォームIDに書き込みしたいSpreadsheetIDとSheetIDを紐づける

1. ClientID JSON の取得

まずは、Google Cloud Platform にアクセスしてログインしてください。

ログイン後、セレクトメニューをクリックし、プロジェクトを選択します。



任意の名前でプロジェクトを新規作成するか、既に別のAPIをつかっていて設定している場合はプロジェクトを選択します。


次は、サイドバーの「ライブラリ」という項目をクリックし、API ライブラリのページに移動します。そのページにて、Google Sheet APIという項目を検索して有効化してください。





最後にサイドバーの「認証情報」」という項目をクリックし、認証情報」のページに移動します。そこで新たにOAuth クライアント ID を作成します。 アプリケーションの種類として、「ウェブアプリケーション」を設定して、「認証済みのリダイレクトURI」には「ドメイン名/bid/(現在使用しているブログのBID)/admin/app_google_spreadsheet_callback」を設定します。



※新規でプロジェクトを作成した場合、OAuthクライアントID作成前に同意画面の設定を登録する必要があります(2021年3月現在)

アプリケーションの種類を「ウェブアプリケーション」を選択してOAuthクライアントIDを作成してください。



※ablogcms.ioで「認証済みのリダイレクトURI」に正常に登録できない場合は、「OAuth同意画面」のページにある公開ステータスの項目を「テスト」にすれば登録できます(2021年3月現在)

その後、クライアントIDなどの情報が記述されたJSONファイルをダウンロードしましょう。


次にダウンロードしたJSONファイルをサーバーにアップロードします。ドキュメントルート以下にアップロードをするとブラウザからアクセスできてしまいますので、ドキュメントルートより上の階層にアップロードするのが望ましいです。

2. ClientID JSON を CMS側に登録

CMSの管理画面に戻り、サイドバーに「Google Sheets」という項目が増えているので、クリックして Google Sheets のページへ移動します。

そして先ほど設置したJSONファイルへのパスを記述します。絶対パスで記述しましょう。パスを記述後、設定を保存してから、「認証」ボタンをクリックして認証するようにしましょう。

※ablogcms.ioで行う場合は、ルートディレクトリには設置できないため、「themes」フォルダなどにJSONファイルを設置します。 ablogcms.ioでの記述例: /var/www/vhost/xxxxxx.ablogcms.io/html/themes/xxxxxxxx.json


3. フォームIDに書き込みしたいSpreadsheetIDとSheetIDを紐づける

さらにCMSの管理ページで、フォームIDに対して書き込みたい Google Sheets のIDを指定する必要があります。
管理画面 > フォームの順にページを移動し、任意のフォームIDの変更画面に移動すると、「Google スプレッドシート Form 設定」という項目が増えています。


Spreadsheet IDと Sheet ID は、開いている スプレッドシート のURLから調べることができます。

https://docs.google.com/spreadsheets/d/{Spreadsheet ID}/edit#gid={Sheet ID}

設定が完了すれば、お問い合わせフォームから送信された内容を Google スプレッドシート に自動で追加登録できます。下の図のような実行結果になっていれば成功です。