しばらくハマったので共有します。
以下の条件で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 -->