検索結果ブロックでページ属性を表示させたい

2014年7月24日 at 18:02

いつもお世話になっております。

検索結果ブロックへページ属性を表示する方法がわかりません。

ページリストでは、

"<?php foreach ($pages as $page):"
" echo $page->getAttribute('pgp_area');"
" echo $page->getAttribute('pgp_price');"
"?>"

のように記述するとページ属性が表示されるのですが、
検索結果ブロックで同じように記述するとエラーが出てしまいます。

Call to undefined method IndexedSearchResult::getAttribute()

以下、view.php からの抜粋ですが、この中にページ属性を読み込む記述をするとしたら
どのように記述すれば良いのでしょうか?
よろしくお願いいたします。

===============concrete/blocks/search/view.phpより抜粋
"<?php foreach($results as $r) { "
" $currentPageBody = $this->controller->highlightedExtendedMarkup($r->getBodyContent(), $query);?>"
" <div class="searchResult">"
" <h3><a href="<?php echo $r->getPath()?>"><?php echo $r->getName()?></a></h3>"
" <p>"
" <?php if ($r->getDescription()) { ?>"
" <?php echo $this->controller->highlightedMarkup($tt->shortText($r->getDescription()),$query)?><br/>"
" <?php } ?>"
" <?php echo $currentPageBody; ?>"
" <a href="<?php echo $r->getPath(); ?>" class="pageLink"><?php echo $this->controller->highlightedMarkup(rawurldecode($r->getPath()),$query)?></a>"
" </p>"
" </div>"
"<?php }//foreach search result ?>"

タグ:

Re: 検索結果ブロックでページ属性を表示させたい

2014年7月25日 at 13:20
検索ブロックの $results に格納されているのは IndexedSearchResult オブジェクトの配列です。
ページリストの $pages 場合は Page オブジェクトの配列になります。
getAttributeは、Pageオブジェクトにしかないメソッドですので、検索結果で使いたい場合は、まず Page オブジェクトを取得する必要があります。

と、理屈はこうですが、実際に書くとこのようになります

<?php
$page = Page::getByID($r->getID());
echo $page->getAttribute('example_handle');
?>
 

Re: 検索結果ブロックでページ属性を表示させたい

2014年7月25日 at 15:02
hissyさん

ありがとうございます!!
無事取得することができました!

因みにこの辺りの情報はどこを見ると勉強できますか?

designer contentsで作成したテキスト情報を検索ブロックで取得・・・など
やりたいことはまだまだ出てきそうなのですが。
エセ開発者にも理解できそうな(笑)リファレンス、またはTips等の情報が
あればご教示いただければ幸いです。

よろしくお願いいたします。
 

Re: 検索結果ブロックでページ属性を表示させたい

2014年7月25日 at 15:43
情報は書籍が一応おすすめです。英語ですがクックブックは逆引き辞典というかコードサンプル集なので英語が分からなくても役に立つと思います
http://amazon.co.jp/gp/product/4839943842/
http://www.packtpub.com/concrete5-cookbook/book

あと、検索結果や一覧にだす情報であれば、Designer Contentで作ったブロックから情報を取得するのではなく、ページ属性を使うのがセオリーです。そちらに変えることも検討してみてください。DCの情報を出さなきゃいけないのは最終手段と思っていただければ。
 

Re: Re: 検索結果ブロックでページ属性を表示させたい

2014年7月25日 at 16:30
ありがとうございます!
早速購入します!

やはりページ属性なんですね。
DCの情報を取得するのをできるだけ避けた方が良い理由としては、

DCの仕様変更等が読み込むロジックに影響しやすいから?・・などでしょうか?

どちらからでも情報が取れれば便利な気もしますが。(^_^;)
 

Re: 検索結果ブロックでページ属性を表示させたい

2014年7月25日 at 18:01
色々ありますが、仕様変更に弱いと言うのはあります。検索結果に出すと言うことは、将来的にじゃあその属性で絞り込んで検索したいとかいうことになった場合とか。あと、コーディングが結構面倒と言うのもあります…(エリア内のDCブロックが無い場合、2個以上ある場合はどうなる?など)。表示速度にも影響はあると思います。
 

Re: 検索結果ブロックでページ属性を表示させたい

2014年7月25日 at 18:51
なるほど!すごく勉強になりました!

ページ属性の使い方を含め、もっと勉強いたします。
ありがとうございました!

今後ともよろしくお願いいたします。m(__)m