ページテンプレートにブロックを埋め込むには

2020年7月5日 at 18:30

https://concrete5-japan.org/help/5-7/developer/working-with-blocks/working-with-existing-block-types/embedding-blocks-in-a-page-template/

こちらの記事を参考に、page_listをページテンプレートにハードコーディングしようとしましたが、どうしてもうまくいきません。

$pt = PageType::getByHandle('自作のページタイプ名');
$bt = BlockType::getByHandle('page_list');
$bt->controller->ptID = $pt->getPageTypeID();
$bt->controller->orderBy = 'display_asc';
$bt->controller->num = '20';
$bt->controller->includeName = true;
$bt->render('templates/自作のリストテンプレ');

ここまではなんとかたどりつきました。なんとなく動作していて、テンプレも読み込んでいて、表示数も確かに記事の数分liリストができあがるんですが、liタグまで入ってきても中身が何も入ってきません。どなたかご教示いただけますでしょうか。どうぞよろしくおねがいいたします。

タグ:

Re: ページテンプレートにブロックを埋め込むには

2020年7月5日 at 19:08
> $bt->render('templates/自作のリストテンプレ');

自作のリストテンプレートは正常に動きますか?

ページリストブロックを普通のエリア上に置いて、表示確認をするときちんと表示されますか?

それでも表示されていないのであれば、カスタムテンプレート(ブロックテンプレート)側で問題があると思います。
 

Re: ページテンプレートにブロックを埋め込むには

2020年7月5日 at 20:12
はい、動作します。もともとはページタイプ内の出力側に置いていたものです。
テンプレート側を調べましたが、
$includeEntryText
$includeName

といったような値が何も返ってきていないようです。でも、ソース内でforeachしている数はあっています。拾ってくるページの数はあっている、ということです。
 

Re: ページテンプレートにブロックを埋め込むには

2020年7月5日 at 21:13
> はい、動作します。もともとはページタイプ内の出力側に置いていたものです。
> テンプレート側を調べましたが、
> $includeEntryText
> $includeName

なるほど・・・。それはちょっと気になりますね・・・。

boolean の値がうまく引き渡らず、
view だけで使う変数であれば、 set() で view に渡してあげるのはどうでしょうか?


$bt->controller->set('includeEntryText', true);

で試していただけますか?

あと、ちょっと話がずれてしまうかもしれませんが、
該当ブロックテンプレートを、テーマ埋め込み専用で使うのであれば、
$includeEntryText の設定を無視し(if を取り除い)て説明が表示されるように view 側を修正してもいいかなーと思います。
 

Re: ページテンプレートにブロックを埋め込むには

2020年7月18日 at 15:17
せっかくご投稿いただいていたのに、気づかずすみません。
一旦このやり方はだめなのかと諦めてしまっておりました。

つまり、
$bt->controller->includeEntryText = true;

$bt->controller->set('includeEntryText', true);
という書き方にする、ということですね!

すべてこの書き方に変更したところ、無事動作しました。
どうもありがとうございました。