a-blog cms Ver. 3.1.0 で予定している機能追加や機能改善についてお知らせします

Roadmap Ver. 3.1

a-blog cms では、より使いやすいサービスを目指して日々プロダクト改善を行っています。
今回は次期マイナーバージョンである、a-blog cms Ver. 3.1.0 で予定している機能追加や機能改善をまとめてご紹介します!

新機能

まずは、目玉である新機能についてです。Ver. 3.1.0 ではプロフェッショナルライセンス以上で使用できる機能を新たに2つ追加することを予定しています。

監査ログ

管理画面でのユーザーの操作内容を監査ログとして確認できるようになります。

エントリーの同時編集の制御機能

複数のユーザーによりエントリーの同時編集が行われた場合、排他制御をおこない片方のユーザーからはエントリーを編集できないようにすることが可能になります。

機能改善

次に、機能改善についてです。Ver. 3.1.0 では日々ユーザーの皆様からいただくご意見をもとに、いくつか現状の機能の改善を予定しています。検討中のものも含めいくつかご紹介したいと思います。

開発ライセンスでも、ページキャッシュが有効に

Ver. 3.0.x 以前の仕様では、正式ライセンスが適用されていない場合、ページキャッシュが強制的に無効になる仕様になっていました。これにより、本番環境でないとページキャッシュ時の動作テストができず、本番公開後にページキャッシュによる意図しない動作が発覚することが見られました。

こういった問題を解決するため、Ver. 3.1.0 では開発ライセンスでもページキャッシュが有効になるように変更することになりました。

ショートカット機能の編集権限で「条件設定」や「カスタム設定」の項目を編集可能に

Ver. 3.0.x 以前の仕様では、ショートカット機能で編集者にモジュールIDの編集権限を与えた場合、「表示設定」の設定項目しか編集することができませんでした。Ver. 3.1.0 では、ユーザーの皆様の方からのご要望の声が多かったこともあり、ショートカット機能で編集者にモジュールIDの編集権限を与えた場合でも「条件設定」や「カスタム設定」の設定項目を編集できるように改善することを検討しています。

これにより、編集者権限でできることが増え、より柔軟な運用ができるWebサイトを作成することが可能になります。

PDF表示のUI改善

メディアユニットやファイルユニットでアップロードしたPDFをエントリーで表示する場合、Ver. 3.0.x 以前のデフォルトの動作では画像として表示する仕様になっていました。しかし、複数ページあるPDFでは特定のページしか表示されないという問題がありました。そこで、Ver. 3.1.0 ではデフォルトでPDFのページを移動できるようにすることを検討しています。

こちらも、画像のLazy Load についての機能改善と同じく、system テーマの変更になりますので、テーマ側で以前の表示に戻すことも可能になる予定です。

バージョン管理機能で時限公開可能に(検討中)

Ver. 3.0.x 以前のバージョン管理機能では作成したバージョンを指定した時間に公開することができないため、既存エントリーの未来バージョンを保存し、公開日時を指定して時限公開するためには、エントリーコードを同一に設定したエントリーを作成して対応する必要がありました。しかし、実際に2つエントリーを作成するというのは、手間であることや、更新者にとっては覚えるルールが増えることから、サイト運用のなかで活用するのは難しいという課題がありました。

そこで、Ver. 3.1.0 では、バージョンの時限公開機能に対応することを検討しております。a-blog cms フォーラム で「バージョン管理」と検索してみると、2016年から話があった機能でありますので、待ち望んでいた方も多いのではないでしょうか?

また、承認機能はバージョン管理機能を活用して、承認依頼ようのエントリーを作成する仕組みになっているため、バージョン管理機能で時限公開ができるようになった場合、承認機能でも時限公開ができるようになる予定です。

その他の機能改善

先程説明した機能改善以外にもいくつか機能改善を行う予定です。現在検討中のものも含め以下の機能改善を予定しています。

  • メディアのファイル名の編集
  • メディアでアップロードしたファイルのリンクに拡張子を含める
  • Twitterログイン時に求められるパスコードを不必要に
  • プレビューの共有機能で共有リンクの発行時に表示している共有期限を絶対的な時間で表示する
  • エントリー編集ページの時刻の直接入力
  • マイページ機能の追加及び、マイページが実装されたテーマを新規追加(検討中)
  • ユニットの複製機能を新規追加(検討中)
  • 同一ブログ内でのカテゴリーコードの重複許可オプションを追加(検討中)

まとめ

次期マイナーバージョンである、a-blog cms Ver. 3.1.0 で予定している機能追加や機能改善についての情報をお届けいたしました。ユーザーの皆様に喜んでいただける CMS を目指して企画・開発を続けてまいりますので楽しみに待っていただけると幸いです。

ご意見・ご要望は Slack コミュニティ公式ツイッター からお気軽にご連絡ください!
引き続き a-blog cms をよろしくお願いいたします!

カテゴリーを SELECT で検索するフォームを作るには


カテゴリーリストモジュール( Category_List )を利用して、検索フォームを作る実装について書いてみます。カテゴリーリストモジュールは、子カテゴリーがあった際に入れ子で表示ができるようにするために少し複雑な動きをしています。

まずは、カテゴリーリストモジュールのスニペットを確認してみます。

カテゴリーリストモジュールのスニペット

<!-- BEGIN_MODULE Category_List -->
<div class="acms-margin-bottom-medium">
@include("/admin/module/setting.html")
  <!-- BEGIN category:loop --><!-- BEGIN ul#front -->
  <ul class="acms-list-group">
  <!-- END ul#front --><!-- BEGIN li#front -->
    <li><!-- END li#front --><!-- BEGIN category:veil -->
      <a href="{url}" class="acms-list-group-item">{name}<!-- BEGIN amount:veil -->
        <span class="acms-badge acms-float-right">{amount}</span><!-- END amount:veil -->
      </a><!-- END category:veil --><!-- BEGIN li#rear -->
    </li><!-- END li#rear --><!-- BEGIN ul#rear -->
  </ul>
  <!-- END ul#rear --><!-- END category:loop -->
</div>
<!-- END_MODULE Category_List -->

エントリーリストモジュール であれば、<ul> は entry:loop の外にあるのが一般的ですが、カテゴリーリストモジュール は、category:loop の内側に <ul> があるのでカスタマイズする際には注意が必要です。

最終的な表示されるフォームのHTML

上記のようなスニペットを利用して、以下のような HTML ができるようなことを考えてみます。

<form action="" method="POST">
  <select name="cid">
    <option>全て</option>
    <option value="2">お知らせ</option>
    <option value="3">製品情報</option>
    <option value="4">会社概要</option>
    <option value="6">お問い合わせ</option>
    <option value="7">採用情報</option>
    <option value="8">物件情報</option>
  </select>
  <input type="submit" name="ACMS_POST_2GET" value="検索">
</form>

フォームとしては実際には、以下のようになります。

スニペットを改造してみる

普通に考えると、まずは以下のように実装するのではないかと思います。

<form action="" method="POST">
  <!-- BEGIN_MODULE Category_List -->
  <select name="cid">
    <option value="">全て</option>
  <!-- BEGIN category:loop -->
    <option value="{cid}">{name}</option>
  <!-- END category:loop -->
  </select>
  <!-- END_MODULE Category_List -->
<input type="submit" name="ACMS_POST_2GET" value="検索">
</form>

しかし、これを a-blog cms のテンプレートに書くと、残念ながら以下のような結果になります。今回、どうしてそうなるのかという説明は省きますが、必要のない   <option value=""></option> を表示させないようにすることを追記することを考えます。

<select name="cid">
  <option value="">全て</option>
  <option value=""></option>
  <option value="2">お知らせ</option>
  <option value=""></option>
  <option value="3">製品情報</option>
  <option value=""></option>
  <option value="1">家庭用製品</option>
  <option value=""></option>
  <option value="5">業務用製品</option>
  <option value=""></option>
  <option value=""></option>
  <option value=""></option>
  <option value="4">会社概要</option>
  <option value=""></option>
  <option value="6">お問い合わせ</option>
  <option value=""></option>
  <option value="7">採用情報</option>
  <option value=""></option>
  <option value="8">物件情報</option>
  <option value=""></option>
  <option value=""></option>
</select>

空の optoin を非表示にする

方法としては IFブロックを利用して表示されて欲しくない部分は出ないようにします。例えば、{cid} が空ではない時という条件を設定したり

  <!-- BEGIN category:loop -->
    <!-- BEGIN_IF [{cid}/nem]-->
      <option value="{cid}">{name}</option>
    <!-- END_IF -->
  <!-- END category:loop -->

子カテゴリーがあるものがあった時に子カテゴリーを非表示にしたい場合を考え、階層の変数 {level} が 1 のものだけを表示する

  <!-- BEGIN category:loop -->
    <!-- BEGIN_IF [{level}/eq/1]-->
      <option value="{cid}">{name}</option>
    <!-- END_IF -->
  <!-- END category:loop -->

このような設定をします。

selected="selected" の処理

検索結果のページで select が選択したところが選択したままになるようにするためには、option に selected="selected" をつける必要があります。

今回は、option の中に IFブロックを書き、グローバル変数 %{CID} とカテゴリーリストモジュール内の {cid} との比較を行います。

<!-- BEGIN_IF [%{CID}/eq/{cid}] --> selected="selected"<!-- END_IF -->

最終的なカテゴリーリストモジュールの実装

  1. スニペットを改造してみる
  2. 空の optoin を非表示にする
  3. selected="selected" の処理

を実装し、人が読みやすいようにテンプレートを書くと以下のようになります。

<form action="" method="POST">
  <!-- BEGIN_MODULE Category_List -->
  <select name="cid">
    <option value="">全て</option>
  <!-- BEGIN category:loop -->
    <!-- BEGIN_IF [{level}/eq/1]-->
    <option value="{cid}"
      <!-- BEGIN_IF [%{CID}/eq/{cid}] -->
        selected="selected"
      <!-- END_IF -->
    >{name}</option>
    <!-- END_IF -->
  <!-- END category:loop -->
  </select>
  <!-- END_MODULE Category_List -->
<input type="submit" name="ACMS_POST_2GET" value="検索">
</form>

a-blog cms のテンプレートは、必要がないところは消える仕様になっていますが、消える部分の外にある改行だけ有効になってしまうことから上記を実行すると

<form action="" method="POST">
  
  <select name="cid">
    <option value="">全て</option>
  
    
  
    
    <option value="2"
      
    >お知らせ</option>
    
  
    
  
    
    <option value="3"
      
    >製品情報</option>


(以下略)

のように空白だらけのソースコードになります。HTML として表側では改行や空白は関係ないので、このままでも構いませんが綺麗にした例もご紹介しておきます。

<form action="" method="POST">
  <!-- BEGIN_MODULE Category_List -->
  <select name="cid">
    <option value="">全て</option>
  <!-- BEGIN category:loop --><!-- BEGIN_IF [{level}/eq/1]-->  <option value="{cid}"<!-- BEGIN_IF [%{CID}/eq/{cid}] --> selected="selected"<!-- END_IF -->>{name}</option>
  <!-- END_IF --><!-- END category:loop --></select>
  <!-- END_MODULE Category_List -->
<input type="submit" name="ACMS_POST_2GET" value="検索">
</form>

この HTML であれば、以下のようなソースコードになります。

<form action="" method="POST">
  
  <select name="cid">
    <option value="">全て</option>
    <option value="2">お知らせ</option>
    <option value="3">製品情報</option>
    <option value="4">会社概要</option>
    <option value="6">お問い合わせ</option>
    <option value="7" selected="selected">採用情報</option>
    <option value="8">物件情報</option>
  </select>
  
<input type="submit" name="ACMS_POST_2GET" value="検索">
</form>

今回は、特殊なカテゴリーリストのループをシンプルにする方法と、現在表示している selected の対応についての紹介でした。

WebサーバーのPHPのバージョンアップをしたら、サイトが表示されなくなった

Ver. 2.11.x 以下

ケース1:ionCube Loader がうまく動いていない場合

ionCube Loader がうまく動いていない可能性があります。WebサーバーのPHPのバージョンに合った ionCube Loader をご利用ください。

ケース2:ionCube Loader 自体のバージョンが古い場合

ionCube Loader 自体のバージョンが古い可能性が考えられます。動作条件にあったバージョンをご利用ください。

ケース3:license.phpが古い場合

上記の2つを対応しても改善しない場合は、license.phpが古い可能性があります。マイページより再ダウンロード(再生成されます)してお試しください。

Ver. 3.0.x 以上

WebサーバーのPHPのバージョンがあっていない可能性があります。対応バージョンページを確認して、CMSのバージョンにあった、PHPバージョンを選択ください。