マシン名が「ニュース」であるビューブロックを作成しました。
module_invoke()
とビューのマシン名を使用して表示するにはどうすればよいですか?
views_embed_view()
を使用:
echo views_embed_view('view_machine_name', 'block_1');
表示名を確認するには、タブをクリックし、ブラウザのアドレスバーでその名前を確認します:#views-tab-block_1
あなたにあげる block_1
。
パラメータをビューに渡したい場合は、以下を使用します。
echo views_embed_view('view_machine_name', 'block_1', $param);
例えば:
echo views_embed_view('view_machine_name', 'block_1', $node->nid);
または:
echo views_embed_view('view_machine_name', 'block_1', $nid, $uid);
ほとんどの場合、tostinniの答えは正しいものです。ただし、ビューのタイトルを含める場合は、少し見苦しくなります。
views_embed_view()
ドキュメントから:
この関数はビューのタイトルを表示しないことに注意してください。これを行う場合は、ビューをロードしてプレビューを取得し、
$view->get_title()
を取得して、この関数が手動で行うことを実行する必要があります。
例えば:
_$name = 'view_machine_name';
$display_id = 'block_1';
$view = views_get_view($name);
if (!$view || !$view->access($display_id)) {
return;
}
$view_content = $view->preview($display_id);
$title = $view->get_title();
_
更新済み:@rojosnowは、ドキュメントでプレビューを取得する必要があると指摘しているbeforeget_title()
を呼び出すため、これらの2行を反転させました。
これは私のために働きました:
$view = views_get_view('view_machine_name');
$view->set_display('Master');
$view->get_title();
$response = $view->preview('You_Block_id');
//これをhtmlで次のように呼び出します//
<div class="col-md-4 col-sm-6">
<div class="blocksOuterWrapper companyNewsWrapper">
'.$response.'
</div>
</div>
私にとって、デフォルトのブロック(名前なし)はblock_1
ではなくblock
と呼ばれています。
<?php echo views_embed_view('news_archive', 'block'); ?>
またtostinniの答えに基づいて:
ビューに結果がない場合にHTMLを表示したくない場合。また、タイトルを追加しますが、結果がある場合のみです。
if (array_filter(views_get_view_result('view_machine_name', 'block_1'))) {
print '<h2 class="my-view-block-title">Special Title</h2>';
print views_embed_view('view_machine_name', 'block_1');
}
次のコードによって、ビューをレンダリングする代わりにブロックをレンダリングできます。
<?php
$block = block_load($module, $delta);
$render_array = _block_get_renderable_array(_block_render_blocks(array($block)));
$output = render($render_array);
print $output;
?>
私自身の経験から、次のような関数を使用して、パスをビューのタイトルまたはコンテンツに変換できます。
_<?php
function view_path_to_title($path)
{
// only if your path is a URL alias
$sql = "SELECT src FROM {url_alias} WHERE dst = '%s'";
$src = db_result(db_query($sql, $path));
// if you do not use URL aliases, you probably use $path here instead of $src
$menu_item = menu_get_item($src);
// make sure it worked as expected
if(!empty($menu_item)
&& $menu_item["page_callback"] == "views_page"
&& count($menu_item["page_arguments"]) >= 2)
{
$args = $menu_item["page_arguments"];
$view = views_get_view($args[0]);
}
else
{
$view = null;
}
if ($view)
{
// just loading a view is not quite enough, we have to setup the
// arguments, including the display, and the "execute" the view
$view->set_display($args[1]);
array_shift($args); // view name
array_shift($args); // display name
$view->set_arguments($args);
$view->execute();
$title = $view->get_title();
if($title)
{
return $title;
}
}
// some "random" default
return $path;
}
_
ビューをレンダリングするには、$view->render()
の代わりに$view->get_title()
を使用します。
確かに、$view->execute()
を適切に呼び出すまで、何も正しく機能しませんでした。空の文字列(多分null)を戻り値として取得します。