カスタムフィールドをキーにしたエントリーの表示順設定

カスタムフィールドの検索を行ったときに、検索結果のエントリーを指定した順番に表示する方法を説明します。(※カスタムフィールド検索については「カスタムフィールドの検索」をご覧ください)

1. 検索対象になるエントリーを用意する

まずは検索対象になるエントリーを用意します。エントリーを作成し、エントリーのカスタムフィールドを追加します。 ここでは例として、「price」というフィールドを用意し、いくつかエントリーを登録しておきます。 /themes/使用中のテーマ/admin/entry/field.html というファイルを作成します。 以下のソースを、/themes/使用中のテーマ/admin/entry/field.html にエントリーのカスタムフィールドを記述します。

<table class="entryFormTable acms-admin-table-entry">
  <tr>
    <th>価格</th>
    <td>
        <input type="text" name="price" value="{price}" size="10" /> 円
        <input type="hidden" name="field[]" value="price" />
        <input type="hidden" name="price:c" value="n" />
        <input type="hidden" name="price:validator#digits" />
        <!-- BEGIN price:validator#digits -->
        <p class="acms-admin-error-text">数値を入力してください。</p>
        <!-- END price:validator#digits -->
    </td>
  </tr>
</table>

エントリーのカスタムフィールドが作成できたら、作成したカスタムフィールドに値を入力し、[作成]ボタンをクリックし保存します。これを数回繰り返し、いくつかエントリーを登録します。 これで検索対象になるエントリーが用意できました。

2. カスタムフィールドをキーにした検索フォームを作成する

手順1で作成したカスタムフィールドをキーにした検索フォームを作成します。以下のソースは、フィールド「price」をキーにして検索するフォームです。

21行目にて、tplを「/index.html」と指定しているので、/themes/使用中のテーマ/index.html に検索フォームを設置してください。

<!-- BEGIN_MODULE Field_Search -->
<table>
  <th>演算子検索</th>
  <td>
    <form action="" method="post" class="acms-form">
      <!-- 宣言 -->
      <input type="hidden" name="field[]" value="price" />
       
      <!-- 演算子 -->
      <input type="hidden" name="price@operator" value="lte" />
       
      <p>価格
        <select name="price">
        <option value="">上限なし</option>
        <option value="300"{price:selected#300}>300円以下</option>
        <option value="200"{price:selected#200}>200円以下</option>
        <option value="100"{price:selected#100}>100円以下</option>
        </select>
      </p>
      <p>
        <input type="hidden" name="tpl" value="/index.html" />
        <input type="hidden" name="cid" value="%{CID}" />
        <input type="hidden" name="bid" value="%{BID}" />
        <input type="submit" name="ACMS_POST_2GET" value="検索する" class="acms-btn" />
      </p>
    </form>
  </td>
</table><!-- END_MODULE Field_Search -->

これでカスタムフィールドの値をキーにして検索するフォームができました。

3. エントリーを表示する順番を設定する

検索結果のエントリーの表示順を設定をする方法は3つあります。

  • (A)モジュールまたはモジュールIDのコンフィグ [優先度:低]
  • (B)モジュールIDの引数設定 [優先度:中]
  • (C) input要素での指定 [優先度:高]

(A)モジュールまたはモジュールIDのコンフィグ [優先度:低]

検索結果のエントリー表示にはモジュールを使用します。その使用するモジュールのコンフィグの「表示順」の設定で、以下の4つの中から選択します。

  1. フィールド(昇順)
  2. フィールド(降順)
  3. 数値フィールド(昇順)
  4. 数値フィールド(降順)

※ カスタムフィールドを「数値」として扱いたい場合は「数値フィールド」を選択します。

※ フィールドと数値フィールドの違い … 数値フィールドの昇順にすると、3、20、100…のように数値として小さい値から順になりますが、フィールドの昇順の場合、数値ではなく「文字列」として扱われるため、100、20、3…のようにアルファベット順になります。アルファベット順の昇順の場合、1が2より先にくるためです。


表示順をフィールド(昇順)に設定する

Entry_Bodyの表示順設定


なお、モジュールIDを使って、検索内容を表示する場合は「フィールド」の引数にチェックをつけてください。チェックをつけることで、検索内容と一致するものが表示されます。


モジュールIDの設定には引数にチェックをつける

モジュールIDの設定には引数にチェックをつける


(B)モジュールIDの引数設定 [優先度:中]


検索結果のエントリー表示で使用しているモジュールIDの引数設定で、以下の4つの中から設定します。

表示順意味
field-ascフィールド(昇順)
field-descフィールド(降順)
intfield-asc数値フィールド(昇順)
intfield-desc数値フィールド(降順)

モジュールIDの引数設定の例

モジュールIDの引数設定の例


※ カスタムフィールドを数値として扱いたい場合は「intfield-asc」「intfield-desc」を使用します。


(C)input要素を使った指定 [優先度:高]

手順2で作成したフォームのsubmitボタンの記述部分に、表示順を指定する記述を追加します。この記述の情報はURLコンテキストに反映されるため、指定を反映させるにはモジュールIDの引数設定にチェックを入れてください

表示順を設定する記述

<input type="hidden" name="order" value="表示順" />
表示順意味
field-ascフィールド(昇順)
field-descフィールド(降順)
intfield-asc数値フィールド(昇順)
intfield-desc数値フィールド(降順)

今回の例では、価格は数値として扱い降順に表示する場合は、以下のような記述と設定になります。

<input type="hidden" name="order" value="intfield-desc" />
<input type="hidden" name="tpl" value="search" />
<input type="hidden" name="cid" value="%{CID}" />
<input type="hidden" name="bid" value="%{BID}" />
<input type="submit" name="ACMS_POST_2GET" value="検索する" class="acms-btn" />

モジュールIDの引数設定にチェックを入れる

モジュールIDの引数設定にチェックを入れる


表示順のチェックと表示順指定を両方設定した場合


引数設定の表示順で、表示順のチェックと表示順指定を両方設定すると、URLコンテキストに表示順の情報があるときにはURLコンテキストが優先され、URLコンテキストに表示順の情報がないときに、引数設定に入力した表示順が適用されます。


引数設定にチェックと表示順指定を両方入力した場合

引数設定にチェックと表示順指定を両方入力した場合


以上で、エントリーをソート表示する検索フォームができました。


表示順設定の優先度について

先述の(A)〜(C)の3つの表示順設定が、(A)〜(C)いずれか1つではなく重複している場合は、優先度がより高いものが適用されます。

表示順の設定の使い分け

基本的には「(A)モジュールまたはモジュールIDのコンフィグ」で説明した設定で表示順 を設定します。1ページに複数の検索フォームがある場合で、それぞれのフォームによって検索結果の表示順を変えたいときは、「(B)モジュールIDの引数設定」 か、「(C)input要素を使った指定」で指定します。

OCN Bizメール&ウェブレンタルサーバでの動作

php5.4で問題が確認されました

OCN Bizメール&ウェブのレンタルサーバをphp5.4で動かすとa-blog cmsが動作しない事が確認されました。 php5.4で動かす場合a-blog cmsが動かないサーバとなります。

ただ、現在このサーバでa-blog cmsを動かしているユーザが多くいますので、 a-blog cms1.7.0が動くパッチを用意しました。

対応方法

  • a-blog cms 1.7.0 にバージョンアップ
  • パッチをダウンロードして解凍する
  • パッチのindex.phpをa-blog cms直下のindex.phpと置き換える

2013/11/15 追記

パッチが完全ではありませんでした。 2013/11/15日前にパッチをあてた方は再度パッチをあてて下さい。


ファイルを開く

パッチファイル

今後ともa-blog cmsをよろしくお願いいたします。

ionCube日本代理店の契約終了について


いつも、a-blog cms をご利用いただき誠にありがとうございます。

a-blog cms のプログラムを動かすために必要な ionCube のサポートを行なっている日本代理店の アシアル株式会社 が 2017年1月31日をもって代理店契約を終了いたしました。

これにより、ionCube Loader のダウンロードを 英国ionCube社 から直接ダウンロードしていただくことになります。

ここでは、ionCube Loader のダウンロード方法とインストール方法をご説明いたします。

ダウンロード

お使いのサーバーのOSに合わせたファイルをダウンロードする必要があります。サーバーOSの詳細な情報については、サーバー管理者にご確認いただくか、以下の方法によりご確認ください。

サーバーOSの確認方法

phpファイル(ファイル名をお好きなものをつけてください)を1つドキュメントルートに作成していただき、以下のコードを入力します。

<?php
    phpinfo();

ファイル設置後、ブラウザで作成したファイルにアクセスすると、様々な情報が表示されます。 ionCubeをインストールするにあたり、以下の情報をメモしてください。

項目
PHP Version5.6.30
SystemLinux 856688bab75a 4.4.43-boot2docker #1 SMP Wed Jan 18 18:33:18 UTC 2017 x86_64
Thread Safetydisabled
Loaded Configuration File/usr/local/etc/php/php.ini

またここでSystemの最後がマシンタイプ(x86_64)になります。マシンタイプより32bitか64bitが判定できるようになっております。

  • x86_64, amd64 の場合 64bit
  • i686, i686, i386 の場合 32bit

以上より以下の情報をメモしてください。※()の中身は先ほどの表に記入した「例」の項目に当たる値となります。

  • PHPのバージョン(5.6.30)
  • OS名(Linux)
  • マシンタイプ(64bit)
  • PHPがスレッド化(disabled)
  • php.iniの場所(/usr/local/etc/php/php.ini)

ionCube Loader ダウンロード

メモした情報より、OS名とマシンタイプにあったionCube Loaderを以下よりダウンロードください。

英国ionCube社

インストール

ionCube Loaderのインストールは「php.ini」ファイルを編集し、インストールします。

以下、インストール方法の流れになります。

  • 先ほどダウンロードしたファイルを適当な場所に設置
  • php.ini を編集
  • apacheなどを再起動を行い、php.iniの反映

ionCube Loaderの設置

まず、先ほどダウンロードしてきたファイルを解凍してください。そうするとたくさんのローダーが入っていることがわかります。



必要なのはこの中から一つのファイルになります。ファイルを決定するために先ほどのメモを使います。ファイルの命名規則は下記のようになっています。

スレッドセーフでない場合

ioncube_loader_<OSの種類>_<お使いのPHPのバージョン>.so

スレッドセーフの場合

ioncube_loader_<OSの種類>_<お使いのPHPのバージョン>_ts.so

これで使用するべきionCube Loaderのファイルが把握できました。このファイルを適当な場所に設置します。

php.iniの編集

次にionCube Loaderをインストールするため php.ini ファイルを編集します。 php.iniファイルの場所は、サーバーによって異なります。たとえば、ご利用のレンタルサーバーによってはコントロールパネルから設定する場合がありますので、ご利用のレンタルサーバーのマニュアルをご覧ください。

php.iniファイルに以下のようなコードを追記ください。

スレッドセーフでない場合

zend_extension = /path/to/ioncube_loader_<OSの種類>_<お使いのPHPのバージョン>.so

# 例
zend_extension = /usr/local/ioncube_loader_lin_5.6.so

スレッドセーフの場合

zend_extension_ts = /path/to/ioncube_loader_<OSの種類>_<お使いのPHPのバージョン>_ts.so

# 例
zend_extension_ts = /usr/local/ioncube_loader_lin_5.6_ts.so

php.iniの反映

WebサーバーがPHPを使用する場合、Webサーバーの起動時にphp.iniファイルが読み込まれます。Webサーバーを再起動して設定を反映させましょう。ただしレンタルサーバーなどをご利用の場合は、特に何もしなくても反映される場合もあります。またFastCGIなどをご利用の場合は、WebサーバーでなくCGIを再起動させてください。

以上となります。

ご不便をおかけしてしまい申し訳ございませんが、ご対応お願いいたします。近いうちに、a-blog cms の公式ドキュメントに追記をしたいと思います。

今後ともa-blog cmsをよろしくお願いいたします。