a-blog cmsでIFブロックが正しく動作しなかったりページが崩れた場合の原因



しばらくハマったので共有します。
以下の条件でIFブロックが正しく動作しなくなります。

  • 条件分岐=IFブロックの引数にカスタムフィールドを使用している
  • カスタムフィールドの値の改行コードを除去していない

つまり、該当のIFブロックをレイアウトに使用していると、入力内容に改行コードが入った時点でページが崩れます。

経緯

発端

リード文を作成するテンプレートを作っていました。カスタムフィールドは仮に {sample_text} とします。

複数行フィールド{sample_text}には文字サイズの調整などでspan要素が入る可能性があり、敢えてエンコードしていません(校正オプション [raw] を付与しています)。
また、見出しを使用しない可能性があるため、IFブロックで内容が入力されたかの判定を含めています。

acms_if_not_delnl.html
<!-- BEGIN_IF [{sample_text}/nem] -->
<div class="sample-text">{sample_text}[raw]</div>
<!-- END_IF -->

問題の発生

当初はこれで問題なかったのですが、コードを読みやすくするために改行を入れたら、サイト全体が崩れました。

解決

a-blog cmsの校正オプションには、改行コードを除去する [delnl] があります。これをIFブロックの引数のフィールドに付与したところ不具合が解消しました。
「空ではない」ことが判明すればいいのですから、最初からこうしておくべきでした。むしろHTMLタグも除去していいかもしれません。

acms_if_delnl.html
<!-- BEGIN_IF [{sample_text}[delnl]/nem] -->
<div class="sample-text">{sample_text}[raw]</div>
<!-- END_IF -->

参考