LoginSignup
0
0

More than 3 years have passed since last update.

concrete5のブロックカスタムテンプレートからrequireAsset()する

Posted at

concrete5でJSのライブラリなどを読み込ませたい場合、アセットを登録して読み込む。

で、ブロックの一部のカスタムテンプレートでjsのちょっとしたライブラリを読み込みたい時(たとえば、PageListブロックにスライダーライブラリを入れたいとか)があるけど、カスタムテンプレートのview.phpで

application/page_list/templates/with_slider/view.php
$this->requireAsset('javascript', 'hogehoge')

みたいにしたら、一応読み込まれる。

一応読み込まれるんだけど、それはブロックキャッシュがオフになってるときだけのことで、ブロックキャッシュがオンになってる状態だと読み込まれない。エラーも出ない。
例えば、ログインしてるときは読み込まれて、ログアウトした途端に読み込まれなくなるみたいなことが起こって悩む。悩んだ。

悩むのはまだいいほうで、最悪、本番環境だけで読み込まれなかったりしてやばい。

本家コミュニティ(英語)に解決法が載っていた。view.phpに書くのはやめて、ブロックのcontroller.phpのほうでカスタムテンプレートを判別して出し分けするしかないらしい。

application/page_liset/controller.php
<?php
namespace Application\Block\PageList;

class Controller extends \Concrete\Block\PageList\Controller
{
    public function registerViewAssets($outputContent = '')
    {
      // カスタムテンプレートごとにassetの呼び出しを行う
      if (is_object($this->block) && $this->block->getBlockFilename() == 'with_slider') {
        $this->requireAsset('javascript', 'hogehoge');
      }
    }
}

のようにしたら、動くようになった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0