如何以编程方式显示视图块?


32

我创建了一个视图块,其计算机名为“ news”。

如何使用module_invoke()视图的机器名称显示它?

Answers:


62

用途views_embed_view()

echo views_embed_view('view_machine_name', 'block_1');

您可以通过点击标签找出的显示名称,并在浏览器的地址栏中查看它的名字:#views-tab-block_1给你block_1


Drupal 8呢?您知道它在drupal 8中如何工作吗?
shekoufeh

对于Drupal 8,我们使用Twig Tweak和以下语法{{ drupal_view('view_machine_name', 'block_1') }}
tostinni

21

如果要将参数传递给视图,请使用:

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);

Drupal 8呢?您知道它在drupal 8中如何工作吗?
shekoufeh

@shekoufeh,根据文档(api.drupal.org/api/drupal/core%21modules%21views%21views.module/…),它在Drupal 8上应该可以正常工作。能否请您告诉我们?
Peter Lozovitskiy

不,它只返回数组
shekoufeh

8

在大多数情况下,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()因此我已将这两行翻转了。


很好,我的朋友。
stefgosselin 2012年

1

这为我工作:

$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>

1

注意,对我而言,默认块(没有名称)被调用,block而不是block_1

<?php echo views_embed_view('news_archive', 'block'); ?>

0

同样基于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');
}

0

您可以通过以下代码来呈现块,而不是呈现视图。

<?php
 $block = block_load($module, $delta);
 $render_array = _block_get_renderable_array(_block_render_blocks(array($block)));
 $output = render($render_array);
 print $output;
?>

0

根据我自己的经验,您可以使用以下功能将路径转换为视图标题或内容。

<?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)作为返回值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.