ある特定のブロックタイプは、1つのページの中に1つしか存在しないようにしたい

2015年7月2日 at 16:59

どうもです。

カスタムブロックタイプを制作中です。

ブロックを挿入すると、特定のJavaScriptをフッターに挿入するというものです。
この場合、1つのページ内に当該ブロックタイプが複数存在すると、JavaScriptも都度読み込まれてしまいます。

これを回避するため、件名にあるような仕組みを作りたいのですが、どうすれば良いでしょうか。

タグ:

Re: ある特定のブロックタイプは、1つのページの中に1つしか存在しないようにしたい

2015年7月2日 at 18:57
5.6 ですか?
5.7 ですか?

ちょっと時間がなくなってきたので超手抜きですが

どちらも、block/controller.php
で on_page_view() の関数を作って

$this->addHeaderItem($html->javascript('JSファイル'), $pkg);
$this->addFooterItem($html->javascript('JSファイル'), $pkg);


みたいにすると、同じページに複数ブロックを入れても、読み込まれるJSは一つだけになります。

HTML ヘルパーを読み込む必要があって
5.7 だったら

use Core;


を namespace の直後に宣言して
on_block_view() の中に

$html = Core::make('helper/html');


で読み込めます。
 

Re: ある特定のブロックタイプは、1つのページの中に1つしか存在しないようにしたい

2015年7月2日 at 19:13
なるほど、on_page_view()はpackeges/my_package/controller.phpで使ったことがありましたが、これだとpackageがインストールされた状態では、常にJSが挿入されて困るなあと思ってたのでした。

blocks/my_block/controller.phpで使用すればいいのですね。

あと、ブロックにはJSで使う変数を入力させているので、出来れば複数ブロックを許可したくなかったんですね。
なので、PHPレベルで制御できれば、と思ってたんですが。
JSレベルでも何とかできないか、考えてみます。

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