PowerCMS Xで検索ページを作成した際ページネーションのリンクや「全100件中1件〜20件」のような表示を出すかと思うのですが、全オブジェクト数や現在のページ数、そして1ページのオブジェクト数から計算することが必要となり、長々としたテンプレートになるように感じます。ページネーションのリンクでページ数のリンク(2ページ目の「2」や3ページ目の「3」)がn個並ぶという条件が付くとさらに大変です。
サイトによって変化するものでない、毎回リファクタリングしてよりよいテンプレートになるようなものでもないと思うので、プラグインを作成して表示に必要な変数をセットしています。例えば「全100件中1件〜20件」のような表示の手前にmt:resultcountvars
というファンクションタグを置いて利用します。
/**
* 表示している件数の表示生成用変数のセット
*
* @param array $args
* @param PAML $ctx
* @return void
*/
public function hdlr_result_count_variables( $args, $ctx ) {
$pagination_limit = (int) $ctx->vars[ 'pagination_limit' ];
$is_estraier_search = array_key_exists( 'estraier_hit', $ctx->local_vars ) ? true : false;
if ( $is_estraier_search ) {
$object_count = (int) $ctx->local_vars[ 'estraier_hit' ];
$current_page = (int) $ctx->local_vars[ 'estraier_currentpage' ];
} else {
$object_count = (int) $ctx->local_vars[ 'object_count' ];
$current_page = (int) $ctx->local_vars[ 'current_page' ];
}
$start = ( $pagination_limit * ( $current_page - 1 ) ) + 1;
$end = ( $pagination_limit * ( $current_page - 1 ) ) + $pagination_limit;
if ( $end > $object_count ) {
$end = $object_count;
}
$ctx->local_vars[ 'object_start_count' ] = $start;
$ctx->local_vars[ 'object_end_count' ] = $end;
}
また、ページネーションリンク用のmt:pagervariables
ファンクションタグでは以下のような値をセットしています。
- 総ページ数
- 表示するオブジェクトの区間(数字リンクの表示やoffset値の設定等に利用)
- 検索パラメータ(limit, offset, _filter以外のパラメータ)
このコードも「Develop Utilityプラグイン」に格納したいなと考えています。