Creé un bloque de vista, cuyo nombre de máquina es "noticias".
¿Cómo lo visualizo usando module_invoke()
y el nombre de la máquina de la vista?
Creé un bloque de vista, cuyo nombre de máquina es "noticias".
¿Cómo lo visualizo usando module_invoke()
y el nombre de la máquina de la vista?
Respuestas:
Uso views_embed_view()
:
echo views_embed_view('view_machine_name', 'block_1');
Puede encontrar el nombre para mostrar haciendo clic en la pestaña y verifique su nombre en la barra de direcciones de su navegador: #views-tab-block_1
le da block_1
.
{{ drupal_view('view_machine_name', 'block_1') }}
Si desea pasar un parámetro a la vista, use:
echo views_embed_view('view_machine_name', 'block_1', $param);
Por ejemplo:
echo views_embed_view('view_machine_name', 'block_1', $node->nid);
o:
echo views_embed_view('view_machine_name', 'block_1', $nid, $uid);
La respuesta de tostinni es la correcta en la mayoría de los casos. Sin embargo, si desea incluir el título Ver, es un poco más feo.
De la views_embed_view()
documentación:
Tenga en cuenta que esta función NO muestra el título de la vista. Si desea hacer eso, deberá hacer lo que hace esta función manualmente, cargando la vista, obteniendo la vista previa y luego obteniendo
$view->get_title()
.
Por ejemplo:
$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();
Actualizado : @rojosnow señaló que los documentos señalan que debe obtener la vista previa antes de llamar, get_title()
así que he cambiado esas dos líneas.
Esto funcionó para mí:
$view = views_get_view('view_machine_name');
$view->set_display('Master');
$view->get_title();
$response = $view->preview('You_Block_id');
// y lo llamé en html así //
<div class="col-md-4 col-sm-6">
<div class="blocksOuterWrapper companyNewsWrapper">
'.$response.'
</div>
</div>
Tenga en cuenta que, para mí, se llama al bloque predeterminado (sin nombre) en block
lugar de block_1
:
<?php echo views_embed_view('news_archive', 'block'); ?>
También aprovechando la respuesta de tostinni:
Si no desea que se muestre ningún HTML si la vista no tiene resultados. Además, agregue un título, pero solo si hay resultados.
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');
}
Desde mi propia experiencia, puede transformar una ruta a un título o contenido de vista con una función como la siguiente.
<?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;
}
Para representar la vista, use en $view->render()
lugar de $view->get_title()
.
Seguro, hasta que llamé correctamente $view->execute()
, nada funcionó bien. Obtendría cadenas vacías (tal vez nulas) como valores de retorno.