Saya membuat blok tampilan, yang nama mesinnya adalah "berita."
Bagaimana cara menampilkannya menggunakan module_invoke()
dan nama mesin tampilan?
Saya membuat blok tampilan, yang nama mesinnya adalah "berita."
Bagaimana cara menampilkannya menggunakan module_invoke()
dan nama mesin tampilan?
Jawaban:
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
.
{{ drupal_view('view_machine_name', 'block_1') }}
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);
Jawaban tostinni adalah jawaban yang benar dalam banyak kasus. Namun, jika Anda ingin memasukkan judul View, itu sedikit lebih jelek.
Dari views_embed_view()
dokumentasi:
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 sebelum menelepon get_title()
jadi saya telah membalik kedua baris itu.
Ini Berhasil 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>
Catatan, bagi saya blok default (tanpa nama) disebut block
daripada block_1
:
<?php echo views_embed_view('news_archive', 'block'); ?>
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');
}
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 membuat tampilan, gunakan $view->render()
sebagai ganti $view->get_title()
.
Yang pasti, sampai saya memanggilnya dengan benar $view->execute()
, tidak ada yang berhasil. Saya akan mendapatkan string kosong (mungkin nol) sebagai nilai pengembalian.