左サイドバーに置いた、日付ナビブロックが、タグブロックのページネーションで、空白になる

2015年4月10日 at 6:09

5.6.3.2ja

ブログ系の投稿をページリストブロックで一覧表示させ、その各投稿に、キーワードタグを追加しています。

そのたぐのキーワードをクリックすると、同一キーワードがある投稿を一覧表示します。

その際、検索ブロックの表示数をテスト的に、defaultの 20件を 3件に設定
$ipl->setItemsPerPage(3)

にて設定して、ページネーションが発生するようにしています。

すると、キーワードタグ一覧では、きちんとページネーションはできるのですが、
2ページに送ったとたんに、

 左サードバーに置いた、日付ナビブロックが、タイトル以外空白になってしまいます。

 調べると、日付の検索条件を作って、最後に、$res = $ipl->getPage();
 を読んだとき、2ページ以降が0件になってしまうようです。

 おそらく、20件以下なので、2ページ以降は処理不要となってしまっているのかもです。

 ちなみに、ページリストブロックを用いたページでは、左サイドバーの日付ナビは空白になることがなく正常です。

 検索ブロックに、タグを表示するロジックを追加しているのが問題なのかもです。

 わかれば教えてください。

タグ:

Re: 左サイドバーに置いた、日付ナビブロックが、タグブロックのページネーションで、空白になる(自己解決)

2015年4月14日 at 12:04
質問自己解決しました。

タグや検索結果において、ページネーションが発生したとき、
サイドバーに置いていた、「ブログの日付アーカイブ」(date_archive)ブロックの
カスタムテンプレートにて以下のように、

2015年4月 (4)
2015年3月 (2)
2015年2月 (1)
2015年1月 (1)

月ごとの件数を出力しています。

このとき、インデックスページリストを使って月の件数を取得しています。

concrete/blocks/date_archive/view.php -> リネームコピーして以下
blocks/date_archive/templates/date_archive.php ←名前適宜

このview.php(date_archive.php)途中に、以下を追加します。

もともと、各月ごとに表示する仕様ですので、
月のループごとに都度検索処理しています。


Loader::library('database_indexed_search'); // 追加

$i=0;
while(true) {

// 追加 ここから
$ipl = new IndexedPageList();
// エイリアスを無視
$ipl->ignoreAliases();
$ipl->setSimpleIndexMode(true);
$year_month_query = $workingDt->format('Y') . '-' . $workingDt->format('m') . '-';
$ipl->filterByPublicDate($year_month_query . '%', 'like');
$aksearch = true;
$ipl->filterByPath('/concrete5', true); // <- ブログページ(例::concrete5)でフィルターするなら
$ipl->filter(false, '(ak_exclude_search_index = 0 or ak_exclude_search_index is null)');
// 検索結果(各月ごと検索でページネーションが効くので無効0にする)
$ipl->setItemsPerPage(0);
$res = $ipl->getPage();

$month_count = count($res);

// 上記の値を、echo '(' . $month_count . ')'; 等で表示してあげてください。
// 追加 ここまで



あまりきれいな書き方ではないです。
きれいな書き方があれば教えてください。