Skip to content

Instantly share code, notes, and snippets.

@YuzuruSano
Last active September 22, 2017 00:32
Show Gist options
  • Save YuzuruSano/568265f622fb266b2794 to your computer and use it in GitHub Desktop.
Save YuzuruSano/568265f622fb266b2794 to your computer and use it in GitHub Desktop.
【concrete5 5.7〜】指定ページの指定エリアの指定ブロックを指定のテンプレートで出力する
<?php
use Concrete\Core\Block\View\BlockView;
$page = Page::getByID($pageID);//取得したいブロックのあるページID;
$areas = array(//取得したいエリアを配列で指定しておく
'area_01',
'area_02',
'area_03',
'area_04',
'area_05',
'area_06'
);
foreach($areas as $area){
$blocks = $page->getBlocks($area);
if(is_array($blocks)){
foreach($blocks as $block){
if($block->btHandle == 'target_block_type'){//target_block_typeは取得したいブロックタイプを指定
$_blocks[] = $block;
}
}
}
}
foreach($_blocks as $bo){
//↓カスタムテンプレートの設定を上書きして保存してしまうので下記は非推奨かな。。。
//$bo->setCustomTemplate('mytemplates'.php');//templates以下のviewテンプレートを.php付けて指定
$bv = new BlockView($bo);
//基本は引数でテンプレートを指定 $bv->render('templates/my_template');
//既にカスタムテンプレートが指定されている場合はそちらが優先される。
//BlockViewクラスをオーバライドして引数指定を優先させることもできる
$bv->render('view');
//今当たっているテンプレートを確実に当てたい時
//use Concrete\Core\Block\View\BlockViewTemplate;
//$bvt = new BlockViewTemplate($bo);
//$templatepath = $bvt->getTemplate();
//list($base, $block) = explode('blocks/', $templatepath);
//list($type, $template) = explode('/',$block);
//$bv = new BlockView($bo);
//$bv->render($template);
}
//contoller内のメソッドを指定して結果を取り出す場合
foreach($_blocks as $bo){
var_dump($bo->getInstance()->getEntries());//例:スライドショーブロックで登録した画像データ配列を取得
}
//controller内でsetした変数を取り出す場合
foreach($_blocks as $bo){
$bc = $bo->getController();
$bcc->view();//viewでセットした変数を
$sets = $bcc->getSets();//まるっと取得して
var_dump($sets['key']);//キー指定で取り出し
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment