Answers:
echo views_embed_view('view_machine_name', 'block_1');
您可以通过点击标签找出的显示名称,并在浏览器的地址栏中查看它的名字:#views-tab-block_1
给你block_1
。
{{ drupal_view('view_machine_name', '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指出文档指出您必须在致电之前获得预览,get_title()
因此我已将这两行翻转了。
根据我自己的经验,您可以使用以下功能将路径转换为视图标题或内容。
<?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)作为返回值。