この記事は最終更新日から2年以上経過しています。
a-blog cms カスタムフィールドのHTMLをインクルードする
公開日:
更新日:
この記事は、「a-blog cms Advent Calendar 2018」8日目の記事です。
今回はカスタムフィールドとインクルードの変数渡しについて書きたいと思います。
https://adventar.org/calendars/2948
a-blog cmsでカスタムフィールドはHTMLベースで書くことができて柔軟な作りになっていますが、HTMLであるため煩雑にもなりがちです。 新規作成の場合はカスタムフィールドメーカーという素敵なツールがあるので問題ないのですが、修正の場合が大変だったりします。
「数が増えました… 値が変わりました… 設置場所が変わりました…」など後から修正が入ることもしばしば…
毎回カスタムフィールドメーカーで作り直すのはちょっとしんどいですよね。
そこで新しいインクルードの書き方を使ってカスタムフィールドのコードを別ファイル化してみたいと思います。
https://developer.a-blogcms.jp/tools/
先に今回作成したインクルードの書き方から見てみましょう
例としてアイキャッチのテキストと画像をカスタムフィールドを作成するとします。 まずはテキスト部分のフィールドを作成しましょう。
<input type="hidden" name="field[]" value="eyecatch_text">このようになりました。 本来であればこうなっているコードですね。
<textarea name="eyecatch_text" rows="5" class="acms-admin-form-width-large">{eyecatch_text}</textarea>
<input type="hidden" name="field[]" value="eyecatch_text">ですが、これだけだと別ファイル化するメリットは少なそうです。
次に画像のカスタムフィールドを作成しましょう。 画像はドラッグ&ドロップできるように標準で使われているjsを使いたいと思います。 では次は本来の書き方から見てみましょう。
<div class="js-img_resize_cf">
<div class="js-drop_area" style="min-height: 100px;">
<div class="acms-admin-drop-area-wrap">
<div class="acms-admin-drop-area drag-n-drop-hover">
<div class="acms-admin-drop-area-inner">
<span class="acms-admin-icon acms-admin-icon-media acms-admin-drop-area-icon"></span>
<p class="acms-admin-drop-area-text"><!--T-->ここにファイルをドロップ<!--/T--></p>
</div>
</div>
</div>
<div>
<!-- BEGIN_IF [{eyecatch_img@path}/nem] -->
<div><img src="/archives/{eyecatch_img@path}" width="600" class="js-img_resize_preview" style="width:300px;"></div>
<input type="hidden" name="eyecatch_img@old" value="{eyecatch_img@path}">
<!-- ELSE -->
<div><img src="" class="js-img_resize_preview" style="width:300px;display:none;"></div>
<!-- END_IF -->
<div class="acms-admin-form-group">
<input type="file" name="eyecatch_img" size="20" multiple="multiple" accept="image/*" id="input-img-eyecatch_img" class="js-img_resize_input acms-admin-hide-visually">
<label for="input-img-eyecatch_img" class="acms-admin-btn-admin" style="cursor:pointer;"><i class="acms-admin-icon-config_export"></i>ファイル選択</label>
<div class="acms-admin-form-checkbox">
<input type="checkbox" name="eyecatch_img@edit" value="delete" id="input-img-eyecatch_img_delete">
<label for="input-img-eyecatch_img_delete">
<i class="acms-admin-ico-checkbox"></i>削除
</label>
</div>
</div>
<div>
<br>画像の説明文:<br>
<textarea name="eyecatch_img@alt" class="acms-admin-form-width-large">{eyecatch_img@alt}</textarea>
</div>
</div>
</div>
</div>
<input type="hidden" name="field[]" value="eyecatch_img">
<input type="hidden" name="eyecatch_img:extension" value="image">
<input type="hidden" name="eyecatch_img@size" value="1400">
<input type="hidden" name="eyecatch_img@filename" value="">ドラッグ&ドロップまでいれるとこんな感じになります。 こちらを先ほどと同じく別ファイル化してインクルードしたものに置き換えて見ましょう。
<input type="hidden" name="field[]" value="eyecatch_img">
<input type="hidden" name="eyecatch_img:extension" value="image">
<input type="hidden" name="eyecatch_img@size" value="1400">
<input type="hidden" name="eyecatch_img@filename" value="">おお!スッキリしましたね。
何をやっているかというと
別ファイル化したものにインクルード文から変数を渡しています。
そして、今回渡した変数はカスタムフィールド名ということになります。
カスタムフィールドのHTML部分はサイトを通して大きく変わらないと思いますので別ファイルで一括管理、hiddenの値はフィールドによって変わりそうですのでそのままとしています。
https://developer.a-blogcms.jp/document/template/include.html
後は作成したい箇所で@include + 変数で呼び出せばok。
これで設置場所が変更になった場合もHTMLのタグを意識せず移動出来るので楽になるのではないでしょうか。
HTMLに修正があっても一括して変更が可能ですのでサイト全体でコードに一貫性が保てメンテナンス性もあがりそうです。
サンプルをGitHubGistに置いていますので良かったらご覧ください。
https://gist.github.com/tamshow/c4eff24f6a2db43551e31ab46839938b
最近のバージョン(2.8〜でしょうか)は@extendsや@includeなど新たに追加された機能により今までと違った作り方もできるようになりました。
@extendsや@includeなどを使うと効率的に書けたり、メンテナンス性も優れたりと嬉しいですね!
この記事とは内容はが違いますが、このSetRenderedを使ったカスタマイズとかもぐっときました!
https://developer.a-blogcms.jp/blog/custom/chartjs_custom_unit.html
2.10からはサブカテゴリーの追加されるとのことですのでますます楽しみです^^ ではでは。
関連記事
この記事のハッシュタグ #a-blog cms から関連する記事を表示しています。
a-blog cmsで使えるTwigフィルター
この記事はa-blog cms Advent Calendar 2025 の2日目の記事です。11月の a-blog cms Training Camp 2025お疲れ様でした!今回、Twigのフィルターと a-blog cms の校正オプションについて発表させていただきました。Twig が使えるようになったことで、フィルターを校正オプションのように扱うことも可能になりました。Twig 側で公式に用意されているフィルターは全部で58種類あり、そのうち a-blog cmsで使用できるのは約39種類です。登壇資料ではすべての詳細をお伝えしきれなかったため、a-blog cmsで利用可能なTwigフィルターの使い方と使用例を、あらためてまとめてみました。公式では58種用意されている実際にa-blog cmsで使えるのは39種(既存の校正オプションとの重複を含む)Twigのフィルターはこちらから参照できます。まずは概要a-blog cm v3.2からテンプレートエンジンTwigが利用可能になりました。a-blog cmsには校正オプションというTwigのフィルターと同様の機能があります。Twigが利用可能になったことでTwigフィルターの機能も使えるようになります。従来の校正オプションも引き続き利用できますが、同名のフィルターはTwig側が優先されます。既存の校正オプションを使いたい場合は、acms_ プレフィックスを付けて明示的に使用しましょう。一方で、twig/string-extraパッケージなどTwig本体を拡張して追加するフィルターは利用できないようです。もし拡張フィルターに近い機能が必要な場合は、校正オプションの拡張として同様の処理を実装するのが良さそうです。拡張も今まで通り校正オプションの拡張でいけるそうです。
スタッフブログ
Training Camp後、セッションを振り返る
こんにちは。今年もAdvent Calendarの時期がやってきました。 この記事は a-blog cms Advent Calendar 2024 の9日目の記事です。 よろしくお願いします! 先月、ベースキャンプ名古屋にて「a-blog cms Training Camp 2024」が開催されました。久々のリアルでお会いできた人も多く懐かし楽しかったです! 僕は事例紹介のセッションで構築したサイトで使用したカスタマイズ方法をご紹介しました。 本記事では、a-blog cms Training Camp 2024で次のバージョンの機能を聞いた内容を取り込みつつ、事例紹介のセッション一部を振り返ってみたいと思います。 1.カスタムユニットフィールドグループを開閉させる カスタムユニットフィールドグループは繰り返しの情報が登録できて便利ですが 情報が多くなってくるとどうしても長くなってしまい順番の入れ替えが大変だったりします。 そこで、管理画面をスッキリさせ、編集がしやすいカスタムフィールドの実装方法を紹介しました。 カスタムフィールドメーカーで作成した場合、tr.sortable-item の td にある table に「details と summary」を追加します。 2箇所追加する必要があり、最初の箇所にはタイトルなどを入れておくと、閉じた状態でも内容がわかりやすくなります。 ← 追加 {titleのカスタムフィールド名} ← 追加 ← 追加 ... ← 追加 保存されていません ← 追加 ← 追加 ... 2.ユニットグループで画像のサイズを揃える ユニットは画像を一括で登録できて便利なのですが、画像のサイズがバラバラの場合は、デコボコになってしまいます。 アップロードする画像やユニットのサイズで調整したできますが、少し手間がかかってしまいます。 そこで、簡単に画像サイズを揃える方法を紹介しました。 管理画面の「編集設定」から、ユニットグループにクラスとラベルを追加します。 例えば次のように設定します。 クラス: acms-col-md-4 is-acms-col-gallery ラベル: 画像ギャラリー 次に、CSSに以下のクラスを追加します。 その後、エントリーのユニットグループで「画像ギャラリー」を選択すればOKです。 .is-acms-col-gallery [class*=column-media] { margin-bottom: var(--var-scale-1); } .is-acms-col-gallery img { aspect-ratio: 3/2; object-fit: cover; } 3.管理画面のカスタムーフィールド選択項目をわかりやすくする 管理画面で選択する際にテキストだけだと変更した場合の表示イメージが想像しづらいです。 その場合、変更後をイメージできる画像を設置するだけでもグッとわかりやすくなります。 ← 追加 背景画像 ← 追加 ... まずカスタムフィールドでチェックボックスを準備します。 その後、親に`.custom-radio-box`というクラスを追加して装飾をしています。 4.同じコードを繰り返し書くのが大変な時は「includeで変数を渡す」 大部分が同じコードはinclude文を使用して変数を渡すことで効率的に再利用できます。 例えば、次のような「○△×」など選択するフィールドを作成したい場合、そのまま書くと1月から12月までパターンを3つ書く必要があり大変な作業となります。 しかし、コードの中身を見るとカスタムフィールドの値が違うだけで大部分のコードは同じとなっていました。 この場合、インクルード文を使用してデータを受け渡すことで作成可能です。 このように重複したコードは、データを表示するテンプレートと値を渡すテンプレートに分けることで簡潔にまとめることができます。 ですが、これも今のバージョンの話、バージョン3.2からはテンプレートエンジンとしてTwigが導入予定ですのでよりプログラム風にコードを書くことができます。 Twigで書き直すとこのようになります。かなり省略できますね。 ソースコードも短くなりファイル間のデータ受け渡しも不要になりました。 今回Twigに書き直したコードは少し複雑ですが、もっと簡単に気軽に使えますので、ぜひ導入してみてください。 以上、「a-blog cms Training Camp 2024」の内容を含め発表した内容をまとめてみました。 また来年キャンプでお会いしましょう!
スタッフブログ