Re: 特定ページで使用しているブロックのID取得

2015年10月28日 at 20:51

こんな感じでどうでしょう。
シンプルな仕組みですが・・・。

$page = Page::getByID(1); // cID で指定したページのオブジェクトを指定
$blocks = $page->getBlocks("Main"); // 指定した「Main」エリアのブロックの情報を取得
if ($blocks) {
foreach($blocks as $block) {
echo h($block->bID) . ", ";
}
}


http://gist.github.com/katzueno/24ba6a251a5e5ac4782b

Re: Re: 特定ページで使用しているブロックのID取得

2015年10月30日 at 17:01
返信ありがとうございます!

結局このような形で対応いたしました。

$c = Page::getCurrentPage(); // ページオブジェクトのインスタンス取得
$db = Loader::db(); // データベースのインスタンス取得
$q = 'SELECT DISTINCT bID FROM collectionversionblocks WHERE (cvID = ' . (int)$c->vObj->cvID . ' AND cID = ' . (int)$c->cID . ')' . " OR (arHandle = 'Main' );";
$r = $db->Execute($q, array());

while ($row = $r->FetchRow()) {
$block = Block::getByID($row["bID"]); //ブロックをインスタンス化
if($block instanceof Block){
if(method_exists($block->instance,"func")){
$block->instance->func(); //ブロックのメンバーメソッドをコール
}
}
}


ありがとうございました!