マシン名が「news」であるビューブロックを作成しました。
module_invoke()ビューのマシン名とそれを使用して表示するにはどうすればよいですか?
マシン名が「news」であるビューブロックを作成しました。
module_invoke()ビューのマシン名とそれを使用して表示するにはどうすればよいですか?
回答:
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の答えは、ほとんどの場合正しいものです。ただし、ビューのタイトルを含める場合は、少しbitいです。
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()これらの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ではなく、block_1:
<?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
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の可能性があります)を取得します。