TODO #17141

サイト内検索結果の $datas($posts)の中身を通常の$postsと同じに

- garyuten約1年前に追加. 約1ヶ月前に更新.

ステータス:担当開始日:
優先度:急いで期日:
担当者:江頭 竜二進捗率:

0%

カテゴリ:サイト内検索
対象バージョン:-

説明

サイト内検索結果を自由に調整したいです。
タグやカテゴリ表示、アイキャッチ画像表示など。

今現在、サーバー負荷軽減のためだと思われますが、最低限のデータしか取得できません。
サーバー負荷関係なく全てのデータを取得する手立てが欲しいです。

現時点の回避策は、
$datasのループ中に、以下のcakePHPの書き方で1件ずつ$postを取得するしかありません。

$BlogPost = ClassRegistry::init('Blog.BlogPost');

foreach($datas as $data):
    $post = $BlogPost->find('all', array(
      'conditions' => array_merge($BlogPost->getConditionAllowPublish(), array(
        'BlogPost.id' => $data["Content"]['model_id']
      )),
      'limit' => 1,
      'cache' => false
    ));

    $eye_catch_src = "/files/blog/" . $post[0]["BlogContent"]["name"] . "/blog_posts/" . $post[0]["BlogPost"]['eye_catch'];
〜
?>

理想は、検索結果データの $datasの中身を通常のループ中$postsと同じように扱えること。
検索結果の表示を、ブログのアーカイブ一覧と同じようにできることです。

履歴

#1 - garyuten約1年前に更新

追加報告です。

$BlogPost = ClassRegistry::init('Blog.BlogPost');

foreach($datas as $data):
    $post = $BlogPost->find('all', array(
      'conditions' => array_merge($BlogPost->getConditionAllowPublish(), array(
        'BlogPost.id' => $data["Content"]['model_id']
      )),
      'limit' => 1,
      'cache' => false
    ));

    $eye_catch_src = "/files/blog/" . $post[0]["BlogContent"]["name"] . "/blog_posts/" . $post[0]["BlogPost"]['eye_catch'];
〜
?>

上記のように取得した $post で正常にリンクが取得できない現象を確認しました。

$postLink = $this->Blog->getPostLinkUrl( $post );

→ /archives/{記事No}
 本来は /news/archives/{記事No} など。

$postにブログ情報が含まれていないのが原因のようです。

よくある使い方として、ブログのテーマ内の post.php を検索結果に流用したい、というのがあります。
この辺のためにも 検索結果の $post を他と同じ挙動にすることが望まれます。

追記)
申し訳ありません、私の勘違いでしたm(_ _)m
HTMLソース上では正しくgetPostLinkUrlが出力されていました。
リンクがおかしくなるのは他のことが原因のようでした。

取り急ぎお詫びまで。

#2 江頭 竜二約1年前に更新

  • 対象バージョン4.0.5 から 4.1.0 に変更

この件、DBと、取得するデータ構造の変更が必要となりそうです。マイナーアップデートで検討したいと思います。
- search_indices テーブルにアイキャッチ情報を持たせる
- タグ、カテゴリを共通インターフェイスとして提供できるかどうか

#3 江頭 竜二約1ヶ月前に更新

  • 優先度通常 から 急いで に変更

#4 江頭 竜二約1ヶ月前に更新

  • 対象バージョン を削除 (4.1.0)

他の形式にエクスポート: Atom PDF