ビューを示す段落があります。エディターは、引数フィルター、ソート、ページャーの表示/非表示などのオプションを設定できます。 「通常」フィールドはこれらのオプションを収集するために使用され、_template_preprocess_paragraph__PARAGRAPH_TYPE
_は実際にビューを構築します。フィルタリングはうまく機能しますが、同時に表示されるアイテムの量を制限しながらエディターが無効にしたい場合は、ページャーを取り除くことができません(ここでは、$view->setItemsPerPage(0);
はオプションではありません)。 mytheme.themeの簡単なコードを次に示します。
_function mytheme_preprocess_paragraph__content_list(&$variables) {
$view = Views::getView('content_list');
if (!$view) {
return;
}
// Simulate user input:
$order = 'DESC';
$disable_pager = TRUE;
$items_per_page = 12;
$filter_args = [1,2,3,4];
$display_id = 'embed_content_list_title';
$view->setDisplay($display_id);
$view->setHandlerOption($display_id, 'sort', 'title', 'order', $order);
if ($disable_pager) {
$display = $view->getDisplay();
$pager = [
'type' => 'none',
'options' => [
'offset' => 0,
'items_per_page' => 50,
],
];
// This doesn't work:
$display->setOption('pager', $pager);
$display->setOverride('pager', $pager);
// This neither works:
$view->display_handler->setOption('pager', $pager);
$view->display_handler->setOverride('pager', $pager);
// I also had no luck with:
$view->pager = NULL;
$view->setItemsPerPage($items_per_page);
}
$view->execute();
$variables['content']['content_list'] = $view->buildRenderable($display_id, [$filter_args]);
}
_
上記のコードでポケットベルを無効にするにはどうすればよいですか?回避策は、ページャーを有効にしたものとページャーを無効にしたものの異なるディスプレイを使用することです。しかし、私はそれを1つのディスプレイだけで解決したいと思います(すでに複数のディスプレイがあり、各ディスプレイに対して両方のバージョンをビルドする必要があるため)。
ピギーバックをオフにする プログラムでビューページャーアイテムのサイズを設定する方法? および PagerPluginBase を確認します。
値を変更するには
if ($disable_pager == FALSE) {
$view->setOffset(0);
$view->setItemsPerPage($items_per_page);
}
今あなたの質問に答えます
上記のコードでポケットベルを無効にするにはどうすればよいですか?
1ページあたりの項目をゼロに設定することで無効にできます。
$view->setItemsPerPage(0);
ページャーなしでアイテムの量を制限したい場合は、設定を解除するだけです。
$view = Views::getView('content_list');
$display_id = 'embed_content_list';
$view->setDisplay($display_id);
$view->setItemsPerPage(12);
$view->execute();
unset($view->pager); // must put this unset after the $view->execute();
$variables['content']['content_list'] = $view->buildRenderable($display_id, [$filter_args]);