it-swarm-id.com

Bagaimana cara saya menunjukkan blok tampilan secara terprogram?

Saya membuat blok tampilan, yang nama mesinnya adalah "berita."

Bagaimana cara menampilkannya menggunakan module_invoke() dan nama mesin dari tampilan?

31
vitaly.batonov

Gunakan views_embed_view() :

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

Anda dapat mengetahui nama tampilan dengan mengklik tab dan memeriksa namanya di bilah alamat browser Anda: #views-tab-block_1 Memberi anda block_1.

63
tostinni

Jika Anda ingin meneruskan parameter ke tampilan gunakan:

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

Sebagai contoh:

echo views_embed_view('view_machine_name', 'block_1', $node->nid);

atau:

echo views_embed_view('view_machine_name', 'block_1', $nid, $uid);
22

jawaban tostinni adalah jawaban yang benar dalam banyak kasus. Namun, jika Anda ingin memasukkan judul View, itu sedikit lebih jelek.

Dari dokumentasi views_embed_view():

Perhatikan bahwa fungsi ini TIDAK menampilkan judul tampilan. Jika Anda ingin melakukan itu, Anda harus melakukan apa yang fungsi ini lakukan secara manual, dengan memuat tampilan, mendapatkan pratinjau dan kemudian mendapatkan $view->get_title().

Sebagai contoh:

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

Diperbarui: @rojosnow mencatat bahwa dokumen menunjukkan Anda harus mendapatkan pratinjau sebelumnya memanggil get_title() jadi saya membalik kedua baris itu.

8

Ini Berfungsi untuk saya:

$view = views_get_view('view_machine_name');
$view->set_display('Master');
$view->get_title();
$response = $view->preview('You_Block_id');

// dan menyebutnya dalam html seperti ini //

<div class="col-md-4 col-sm-6">
<div class="blocksOuterWrapper companyNewsWrapper">
'.$response.'
</div>
</div>
1
devashish gurjar

Catatan, bagi saya blok default (tanpa nama) disebut block daripada block_1:

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

Juga membangun jawaban tostinni:

Jika Anda tidak ingin HTML apa pun muncul jika tampilan tidak memiliki hasil. Juga, tambahkan judul, tetapi hanya jika ada hasil.

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
squarecandy

Anda dapat merender blok Anda alih-alih merender tampilan dengan kode berikut.

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

Dari pengalaman saya sendiri, Anda dapat mengubah jalur ke judul tampilan atau konten dengan fungsi seperti berikut.

<?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;
}

Untuk merender tampilan, gunakan $view->render() alih-alih $view->get_title().

Yang pasti, sampai saya benar memanggil $view->execute(), tidak ada yang berhasil. Saya akan mendapatkan string kosong (mungkin nol) sebagai nilai pengembalian.

0
Alexis Wilke