ホーム > ブログ > concrete5 > concrete5である特定の階層の親ページデータを取得

concrete5である特定の階層の親ページデータを取得

2016.07.16

こんにちは、銀ねこです。

先日concrete5で特定のタイプの親ページの下層ページにそれぞれのグローバルエリアを設定するというのをやったのでそのメモを残しておきます。

まず、親ページデータの取得方法

まずは親ページの取得方法について。

一個上のページのデータは以下のコードで取得可能です。

  1. //親ページのIDからページ情報を取得
  2. $parent = Page::getByID($c->getCollectionParentID());

なので特定のページタイプになるまで親のページをwhile(true)を使って取得し続ければOK。

  1. $hometype = 'home';
  2.  
  3. //直上の階層のデータ取得
  4. $parentID = $c->getCollectionParentID();
  5. $parent = Page::getByID($parentID);
  6.  
  7. if($parentID != null){
  8.  
  9. if($parent->getCollectionTypeHandle() === $hometype){
  10. $homeData = $parent;
  11. }
  12.  
  13. while(true){
  14. $parent = Page::getByID($parentID);
  15. $parentID = $parent->getCollectionParentID();
  16.  
  17. if( $parent->getCollectionTypeHandle() === $hometype){
  18. $homeData = $parent;
  19. break;
  20. }
  21. }
  22. }

取得方法1ブロックの情報をそのまま取得

特定のエリアのヘッダーロゴやサイドナブなどブロックを取得しそのまま表示させます。

  1. //htmlブロックの出力
  2. $globalNav = $homeData->getBlocks('globalNav');
  3. if($globalNav[0]->getInstance()->getSearchableContent()){
  4. echo $globalNav[0]->getInstance()->getSearchableContent();
  5. }
  6.  
  7. //画像ブロックの出力
  8. $headerLogo = $homeData->getBlocks('headerLogo');
  9. if($headerLogo[0]->getInstance()->getFileObject()){
  10. $logo = $headerlogo[0]->getInstance()->getFileObject();
  11. $logo = $imgHelper->outputThumbnail($logo,9999,9999);//デフォのサイズで出力
  12. }
  13.  
  14. //記事ブロックの出力
  15. $footer = $homeData->getBlocks('footerArea');
  16. if($footer[0]->getInstance()->getContent()){
  17. echo $footer[0]->getInstance()->getContent();
  18. }

取得方法2:後から気づいた、プレフィックスをつけてでグローバルエリアの名前を変更

人間夢中になっているときは気付かないもので 汗

それぞれglobalエリア名にページのスラッグを取得して、それをプレフィックスにしてしまえば、各ページ以下のグローバルエリア名そのものが変わるからそんな面倒なことをする必要がないことに気づきました。。。

  1. <?php
  2. $area = '';
  3. //特定のページのスラッグを取得
  4. if($homeData){
  5. $area = $homeData->getCollectionHandle().'-';
  6. }
  7. $area .= 'area';
  8. $a = new GlobalArea($area);
  9. $a->display();
  10. ?>

最後に注意すべき点

どちらにせよページを新規で作ったとき、まだ親ページが決まってない場合、親ページのデータが取得できないのでエラーを吐きます。

なので、編集ページ位置を判定して、もし取れてなかったらデータを出力しないようにしましょう。

この記事のタグ