【初心者向け】a-blog cmsのエントリーサマリーにIFブロックでスパイスを

a-blog cms Advent Calendar 2015 の16日目の記事です。初心者向けの記事になりますので、アップルップルの方やエバンジェリストの方、ヘビーユーザーの方は、軽く読み飛ばすどころか、絶対に読まないでください。仮に読もうという人がいるならば、最後の2段落だけ読んでいただければ結構です。

a-blog cmsはモジュールというものを貼り付けるだけでいろいろなことができますが、実際の案件になるとカスタマイズしなければならない部分も多くなります。

その中でもいろんなところに使えて、一番重宝なのがエントリーサマリー(Entry_Summary)モジュールです。エントリー本文の最初から何文字という感じで概要を抽出することができるので、記事の概略を見せたりすることができます。デモサイトだとこういう風に使われていますね。


エントリーサマリーモジュールの使用例

デフォルトのテーマの一つsite2015(デモサイト)で使われているエントリーサマリー(/themes/site2015/include/module/entry/summary.html)では、サマリーの出力部分はこのように書かれています。

<p class="summaryDetail">{summary}[trim(500, '...')]</p>

半角500文字で切って、最後に「...」を付けるというような意味になります。

このままでも使えるのですが、ブログの概要だと「こんにちは! ○○ショップ店長の△△です! 寒くなったり暖かくなったりしていますが、皆さん風邪などはひかれていませんでしょうか? さて、今日...」のように、設定する字数次第では、本題に入る前の挨拶で切れてしまうことも多くなります。どの記事を見ても挨拶しか見えない記事一覧はブログを読む気を根こそぎ奪ってしまいます。読んでほしい気持ちも伝わらないんですよね・・・。

割と簡単かつ難しい解決方法としては、descriptionをきちんと書いて、それを出力すればいいわけですが、記事によってはdescriptionを書くほどでないという場合もあります。

そこで、descriptionが入力されている場合にはdescriptionを出し、空の場合は概要の先頭を何文字出力するという分岐が出来ればいいわけです。

ここでIFブロックと呼ばれる機能の登場です。a-blog cmsはテンプレート内にPHPは書けないのですが、まあIFだけ使えればなんとかなるのがいいところです。

で、その概要部分の出力を分岐させる書き方は次の通り。

<!-- BEGIN_IF [{entry_meta_description}/nem] -->
<p class="summaryDetail">{entry_meta_description}[trim(240, '...')]</p>
<!-- ELSE -->
<p class="summaryDetail">{summary}[trim(240, '...')]</p>
<!-- END_IF -->

{entry_meta_description}はどこから出てきたのかという話ですが、site2015というテーマには各記事のdescriptionを入力する欄があらかじめカスタマイズによって、カスタムフィールドとして用意されていまして、その変数名が{entry_meta_description}ということになります。(a-blog cmsの変数名は{}に入っているので、テンプレート内でも判別しやすいですね。)

あ、そもそもカスタムフィールドって何?という方は、公式サイトのドキュメントを見てくださいね。

そして、その後の/nemが「空でなかった場合」を表しています。{entry_meta_description}が空でなかった場合、すなわち何かが入力されていれば、

<p class="summaryDetail">{entry_meta_description}[trim(240, '...')]</p>

を出力しますし、何も入っていない状態であれば、

<p class="summaryDetail">{summary}[trim(240, '...')]</p>

で、本文の概要を勝手に抽出して出力します。半角240文字にしたのは、descriptionってだいたいそんなもんだろうという数字なので、好きなように設定してください。

descriptionでは長すぎるから、もう少し短くしたいという場合には、{entry_meta_description}ではなく、別のカスタムフィールドを作って、それを引っ張ってくればいいわけです。

例えば {shortDecription} なんてカスタムフィールドを作って、/themes/site2015/admin/entry/seo.html 辺りに貼り付けてやれば、それだけでカスタムフィールドはできあがります。カスタムフィールドはカスタムフィールドメーカーというのがあるので、それでさくっと作ってやればオッケーです。

IFブロックを使わずに同じ事ができますし、一つの表現をするのに様々なアプローチを取れるa-blog cmsですが、他のCMSを使ったことがある人やプログラム経験のある人なら、IFブロックを使った方がシンプルでわかりやすいかもしれないなぁと思います。

PHPを書けないという人でも、IFブロックの書き方と /nem を覚えるだけで、できることは飛躍的に増えます。

最後に、柄にもないエントリーを書いたこのブログは、2012年の前半にリリースされ、IFブロックが実装される前のバージョンであるa-blog cms 1.5.0(もうすぐ2.6が出るのですが・・・)であることをお伝えしておきたいと思います。



グローバル変数

global varsvalues
%{BID}2
%{UID}
%{CID}44
%{EID}599
%{RID}
%{RVID}
%{UTID}
%{CMID}
%{TBID}
%{KEYWORD}
%{TAG}
%{FIELD}
%{DATE}
%{START}1000-01-01 00:00:00
%{END}9999-12-31 23:59:59
%{PAGE}1
%{ORDER}
%{QUERY}
%{QOL}?
%{ADMIN}
%{IS_ADMIN}0
%{ADMIN_PATH}
%{ADMIN_PATH_MID}
%{MID}
%{MODULE_ID}
%{MODULE_NAME}
%{STYLEGUIDE_PAGE}acms-admin
%{GETTEXT_TYPE}user
%{BCD}blog
%{UCD}
%{CCD}ablogcms
%{ECD}entrySummary-and-IfBlock.html
%{BLOG_NAME}ブログ
%{USER_NAME}
%{CATEGORY_NAME}a-blog cms
%{ENTRY_TITLE}【初心者向け】a-blog cmsのエントリーサマリーにIFブロックでスパイスを
%{RULE_NAME}
%{CONFIG_SET_NAME}共通の設定
%{THEME_SET_NAME}ブログテーマ
%{EDITOR_SET_NAME}編集の基本設定
%{RCID}44
%{PCID}
%{RCCD}ablogcms
%{PCCD}
%{ROOT_CATEGORY_NAME}a-blog cms
%{PARENT_CATEGORY_NAME}
%{RBID}1
%{PBID}1
%{RBCD}
%{PBCD}
%{ROOT_BLOG_NAME}フォルトゥナ
%{PARENT_BLOG_NAME}フォルトゥナ
%{ALIAD_ID}
%{ALIAS_ID}
%{ALIAS_DOMAIN}
%{ALIAS_CODE}
%{ALIAS_NAME}
%{CHARSET}UTF-8
%{META_KEYWORDS}
%{META_DESCRIPTION}
%{NOW_DATE}2024-10-11
%{NOW_TIME}01:27:27
%{BLOG_THEME_COLOR}#559655
%{BLOG_THEME_CONTRAST_COLOR}#ffffff
%{VERSION}3.1.22
%{SNAME}sid
%{SID}
%{SESSION_USER_ID}
%{SESSION_BLOG_ID}
%{MAX_PUBLISHES}15
%{ROOT_TPL}/themes/blog@base/_entry.html
%{ROOT_TPL_NAME}_entry
%{ROOT_DIR}/
%{DOCUMENT_ROOT}/
%{THEMES_DIR}/themes/
%{JS_DIR}/js/
%{JS_LIB_DIR}/js/library/
%{JS_LIB_JQUERY_DIR}/js/library/jquery/
%{JS_LIB_JQUERY_DIR_VERSION}3.6.1
%{LOGIN_SEGMENT}login
%{ADMIN_RESET_PASSWORD_SEGMENT}admin-reset-password
%{ADMIN_RESET_PASSWORD_AUTH_SEGMENT}admin-reset-password-auth
%{ADMIN_TFA_RECOVERY_SEGMENT}admin-tfa-recovery
%{SIGNIN_SEGMENT}signin
%{SIGNUP_SEGMENT}signup
%{RESET_PASSWORD_SEGMENT}reset-password
%{RESET_PASSWORD_AUTH_SEGMENT}reset-password-auth
%{TFA_RECOVERY_SEGMENT}tfa-recovery
%{PROFILE_UPDATE_SEGMENT}mypage/update-profile
%{PASSWORD_UPDATE_SEGMENT}mypage/update-password
%{EMAIL_UPDATE_SEGMENT}mypage/update-email
%{TFA_UPDATE_SEGMENT}mypage/update-tfa
%{WITHDRAWAL_SEGMENT}mypage/withdrawal
%{SYSTEM_THEMES_DIR}/themes/system/
%{CURRENT_THEMES_DIR}/themes/blog@base/
%{ARCHIVES_DIR}/archives/
%{MEDIA_ARCHIVES_DIR}/media/
%{MEDIA_STORAGE_DIR}storage/
%{BID_ARCHIVES_DIR}/archives/002/
%{YM_ARCHIVES_DIR}/archives/002/202410/
%{ARCHIVES_DIR_TEMP}/archives/temp/
%{ARCHIVES_CACHE_SERVER}
%{HTTP_THEMES_DIR}https://www.color-fortuna.com/themes/
%{HTTP_CURRENT_THEMES_DIR}https://www.color-fortuna.com/themes/blog@base/
%{HTTP_ARCHIVES_DIR}https://www.color-fortuna.com/archives/
%{HTTP_MEDIA_ARCHIVES_DIR}https://www.color-fortuna.com/media/
%{HTTP_ARCHIVES_DIR_TEMP}https://www.color-fortuna.com/archives/temp/
%{HTTP_BID_ARCHIVES_DIR}https://www.color-fortuna.com/archives/002/
%{HTTP_YM_ARCHIVES_DIR}https://www.color-fortuna.com/archives/002/202410/
%{HTTP_REQUEST_URL}https://www.color-fortuna.com/blog/ablogcms/entrySummary-and-IfBlock.html
%{IMAGES_DIR}/themes/system/images/
%{SCRIPT_ROOT}/
%{REWRITE_OFFSET}/
%{HTTP_ROOT}https://www.color-fortuna.com/
%{DOMAIN}www.color-fortuna.com
%{DOMAIN_ROOT}www.color-fortuna.com
%{HTTP_HOST}www.color-fortuna.com
%{BASE_URL}http://www.color-fortuna.com/blog/
%{ADMIN_BASE_URL}https://www.color-fortuna.com/
%{BLOG_URL}https://www.color-fortuna.com/blog/
%{ROOT_BLOG_URL}https://www.color-fortuna.com/
%{PARENT_BLOG_URL}https://www.color-fortuna.com/
%{CATEGORY_URL}https://www.color-fortuna.com/blog/ablogcms/
%{ROOT_CATEGORY_URL}https://www.color-fortuna.com/blog/ablogcms/
%{PARENT_CATEGORY_URL}https://www.color-fortuna.com/blog/
%{CANONICAL_URL}https://www.color-fortuna.com/blog/ablogcms/entrySummary-and-IfBlock.html
%{ENTRY_URL}https://www.color-fortuna.com/blog/ablogcms/entrySummary-and-IfBlock.html
%{PERMALINK}https://www.color-fortuna.com/blog/ablogcms/entrySummary-and-IfBlock.html
%{INHERLINK}https://www.color-fortuna.com/blog/ablogcms/entrySummary-and-IfBlock.html
%{CURRENT_URL}https://www.color-fortuna.com/blog/ablogcms/entrySummary-and-IfBlock.html
%{HOME_URL}https://www.color-fortuna.com/
%{BASE_ACMS_PATH}blog/
%{ACMS_PATH_BASE}blog/
%{SCRIPT_DIR}/home/kyunitan/color-fortuna.com/public_html/
%{CURRENT_ROOT}/blog/ablogcms/entrySummary-and-IfBlock.html
%{REQUEST_PATH}/blog/ablogcms/entrySummary-and-IfBlock.html
%{REQUEST_DIRNAME}/blog/ablogcms
%{MODULE}
%{VALID_ID_REGEX}@^[a-zA-Z0-9_-]+$@
%{REGEX_VALID_ID}@^[a-zA-Z0-9_-]+$@
%{REGEX_VALID_PASSWD}@^[!-~]+$@
%{CATEGORY_EXISTS}1
%{CATEGORY_LEVEL}1
%{VIEW}entry
%{UA}CCBot/2.0 (https://commoncrawl.org/faq/)
%{CH_UA}
%{CH_UA_MOBILE}0
%{CH_UA_PLATFORM}
%{UA_GROUP}PC
%{REMOTE_ADDR}3.238.82.77
%{MAINTENANCE_MODE}
%{PROTOCOL}https
%{BLOG_CODE}blog
%{USER_CODE}
%{CATEGORY_CODE}ablogcms
%{ENTRY_CODE}entrySummary-and-IfBlock.html
%{BLOG_ID}2
%{USER_ID}
%{CATEGORY_ID}44
%{ENTRY_ID}599
%{SUID}
%{SBID}
%{SESSION_USER_AUTH}
%{SESSION_USER_NAME}
%{SESSION_USER_CODE}
%{SESSION_USER_MAIL}
%{SEARCH_ENGINE_KEYWORD}
%{MAIL_MAGAZINE_FROM}info@example.com
%{MAIL_TRACKBACK_FROM}
%{MAIL_COMMENT_FROM}info@example.com
%{MAIL_REMIND_FROM}
%{MAIL_SUBSCRIBE_FROM}info@example.com
%{MAIL_SUBSCRIBE_ADMIN_FROM}info@example.com
%{PHP_FILE_MAX_SIZE}30M
%{PHP_POST_MAX_SIZE}30M
%{MEDIA_LIBRARY}on
%{IS_DEVELOPMENT}off
%{IS_TRIAL}off
%{TRIAL_COUNT_DOWN}0
%{IS_SUBSCRIPTION}off
%{SUBSCRIPTION_PLAN}
%{UNLICENSED_REASON}
%{SUBSCRIPTION_PAYMENT}
%{ACTIVATION_ENDPOINT}https://mypage.a-blogcms.jp/api/activation
%{GOOGLE_API_KEY}
%{PREVIEW_DEFAULT_DEVICE}iPhone 6/7/8
%{PREVIEW_HAS_HISTORY_DEVICE}
%{APPROVAL_PREVIEW_DEFAULT_DEVICE}iPhone 6/7/8
%{APPROVAL_PREVIEW_HAS_HISTORY_DEVICE}
%{TIMEMACHINE_PREVIEW_DEFAULT_DEVICE}PC
%{TIMEMACHINE_PREVIEW_HAS_HISTORY_DEVICE}
%{d}11
%{D}Fri
%{j}11
%{l}Friday
%{N}5
%{S}th
%{w}5
%{z}284
%{W}41
%{F}October
%{m}10
%{M}Oct
%{n}10
%{t}31
%{L}1
%{o}2024
%{Y}2024
%{y}24
%{a}am
%{A}AM
%{B}727
%{g}1
%{G}1
%{h}01
%{H}01
%{i}27
%{s}27
%{u}000000
%{e}Asia/Tokyo
%{I}0
%{O}+0900
%{P}+09:00
%{T}JST
%{Z}32400
%{c}2024-10-11T01:27:27+09:00
%{r}Fri, 11 Oct 2024 01:27:27 +0900
%{U}1728577647

モジュール処理時間

moduleidentifierrun timesql
Entry_Body0.0328814
Entry_ListentryList0.015696
Ogp0.0106312
Category_ListcategoryList0.0079310
NavigationglobalNavi0.004941
NavigationglobalNavi0.004731
TopicpathtopicPath0.004065
TopicpathtopicPath0.003955
Blog_FieldtopBlog0.003784
Blog_FieldtopBlog0.00373
Blog_FieldtopBlog0.003183
Blog_FieldtopBlog0.00313
Blog_FieldtopBlog0.003093
Blog_FieldtopBLog0.002661
Topicpathtopicpath0.002053
Touch_Unlogin0.001960
Entry_Field0.001882
Blog_FieldtopBLog0.001482
Entry_Field0.00131
Entry_Field0.001221
Form2_Unit0.001070
Form0.001041
Form2_Unit0.0010
Form2_Unit0.00081
Js0.000330
Form2_Unit0.000240
Touch_Keyword0.000180
Field_Search0.000170
Touch_ApprovalEditVersion0.000170
Touch_NotCategory0.000170
Admin_Entry_Add0.000160
Touch_Approval0.000160
Touch_GeolocationEntryFunction0.000150
Touch_HigherLicense0.000140
Touch_MailMagazineEnable0.000140
Touch_NotsessionWithApprovalAdministrator0.000140
Touch_SessionWithContribution0.000140
Touch_Index0.000130
Touch_Login0.000130
Touch_Form20.000120
Touch_NotEdit0.000120
Touch_NotEdit0.000120
Touch_NotPreview0.000120
Tag_Filter0.000110
Touch_RelatedEntryFunction0.000110
Touch_SessionWithAdministration0.000110
Touch_SessionWithCompilation0.000110
Touch_SessionWithContribution0.000110
Touch_Tag0.000110
Touch_sessionWithApprovalAdministrator0.000110
Touch_Category0.00010
Touch_Edit0.00010
Touch_NotApprovalEditVersion0.00010
Touch_NotTimemachineMode0.00010
Touch_Top0.00010
Touch_Version0.00010
Touch_EditDirect9.0E-50
Touch_NotAdmin9.0E-50
Touch_NotAdmin9.0E-50
Touch_NotApprovalORsessionWithApprovalAdministrator9.0E-50
Touch_NotEditDirect9.0E-50
Touch_NotEditInplace9.0E-50
Touch_SubCategoryFunction9.0E-50
Touch_sessionWithApprovalAdministrator9.0E-50
Touch_Admin8.0E-50
Touch_Benchmark8.0E-50
Touch_Debug8.0E-50
Touch_EditInplace8.0E-50
Touch_Entry8.0E-50
Touch_NotEdit8.0E-50
Touch_NotEdit8.0E-50
Touch_NotEntry8.0E-50
Touch_NotPreview8.0E-50
Touch_NotTag8.0E-50
Touch_SessionWithAdministration8.0E-50
Touch_SessionWithContribution8.0E-50
Touch_SessionWithContribution8.0E-50
Touch_SessionWithContribution8.0E-50
Touch_Tag8.0E-50
Touch_Version8.0E-50
Touch_Entry7.0E-50
Touch_Entry7.0E-50
Touch_NotPreview7.0E-50
Touch_Admin6.0E-50
Touch_Edit6.0E-50
Touch_GeolocationEntryFunction6.0E-50
Touch_NotApprovalORsessionWithApprovalAdministrator6.0E-50
Touch_NotEntry6.0E-50
Touch_NotPreview6.0E-50
Touch_NotPreview6.0E-50
Touch_NotPreview6.0E-50
Touch_NotPreview6.0E-50
Touch_NotPreview6.0E-50
Touch_RelatedEntryFunction6.0E-50
Touch_SessionWithAdministration6.0E-50
Touch_SessionWithAdministration6.0E-50
Touch_SessionWithAdministration6.0E-50
Touch_SessionWithContribution6.0E-50
Touch_Unlogin6.0E-50
Touch_Admin5.0E-50
Touch_EditInplace5.0E-50
Touch_Entry5.0E-50
Touch_Entry5.0E-50
Touch_Entry5.0E-50
Touch_Entry5.0E-50
Touch_Entry5.0E-50
Touch_NotEntry5.0E-50
Touch_SessionWithAdministration5.0E-50
Touch_SessionWithContribution5.0E-50
Touch_SessionWithContribution5.0E-50
Touch_SessionWithContribution5.0E-50
Touch_SubCategoryFunction5.0E-50
Touch_Unlogin5.0E-50
MODULE TOTAL TIME0.1263982
BOOT TOTAL TIME0.16414
BUILD TOTAL TIME0.17282
REWRITE PATH TOTAL TIME0.01588
PROCCESS TIME0.574378

テンプレート

template
themes/base/include/head/meta.html
themes/base/include/head/robots.html
themes/base/include/head/link.html
themes/base/include/head/js.html
themes/base/include/head/structured-data.html
themes/base/include/body-start.html
themes/base/include/header.html
themes/base/include/header/dynamicGlobalNavi.html
themes/system/admin/module/setting.html
themes/blog@base/include/header/page-title.html
themes/base/include/header/topicpath.html
themes/system/admin/action.html
themes/system/include/check-seo.html
themes/base/include/footer.html
themes/base/include/body-end.html
themes/base/include/module/tag/filter.html
themes/base/include/module/entry/bodyNoDate.html
themes/system/admin/entry/revision-info.html
themes/system/admin/entry/title.html
themes/system/include/unit.html
themes/base/include/unit/tag-select.html
themes/system/include/gmaps-error.html
themes/base/include/unit/custom.html
themes/base/include/unit/extend.html
themes/base/include/module/entry/continue.html
themes/base/include/form/unit.html
themes/base/include/form/input.html
themes/base/include/form/confirm.html
themes/system/admin/entry/edit.html
themes/system/admin/entry/style.html
themes/system/admin/entry/geo.html
themes/system/admin/map/_google-map-picker.html
themes/system/admin/map/_open-street-map-picker.html
themes/system/admin/entry/related.html
themes/system/admin/entry/related-table.html
themes/base/admin/entry/field.html
themes/base/admin/entry/ogp.html
themes/base/admin/entry/pickup.html
themes/base/admin/entry/seo.html
themes/system/admin/entry/unit.html
themes/base/admin/entry/unit/extend.html
themes/base/admin/entry/field_foot.html
themes/system/admin/entry/revision.html
themes/system/admin/entry/js.html
themes/system/admin/entry/add.html
themes/system/admin/form2/edit.html
themes/system/admin/form2/unit.html
themes/system/admin/entry/action.html
themes/base/include/module/entry/list.html
themes/base/include/module/category/list.html

メモリー

keyvalue
memory_limit200M
memory_get_usage3.56 MB
memory_get_peak_usage5.27 MB

Query Count

query count
123