Ich habe einen Ansichtsblock erstellt, dessen Computername "Nachrichten" ist.
Wie zeige ich es mit module_invoke()
und dem Computernamen der Ansicht an?
Ich habe einen Ansichtsblock erstellt, dessen Computername "Nachrichten" ist.
Wie zeige ich es mit module_invoke()
und dem Computernamen der Ansicht an?
Antworten:
Verwendung views_embed_view()
:
echo views_embed_view('view_machine_name', 'block_1');
Sie können den Anzeigenamen herausfinden, indem Sie auf die Registerkarte klicken und den Namen in der Adressleiste Ihres Browsers überprüfen: #views-tab-block_1
gibt Ihnen block_1
.
{{ drupal_view('view_machine_name', 'block_1') }}
Wenn Sie der Ansicht einen Parameter übergeben möchten, verwenden Sie:
echo views_embed_view('view_machine_name', 'block_1', $param);
Beispielsweise:
echo views_embed_view('view_machine_name', 'block_1', $node->nid);
oder:
echo views_embed_view('view_machine_name', 'block_1', $nid, $uid);
tostinnis antwort ist in den meisten fällen die richtige. Wenn Sie jedoch den Titel "Ansicht" einfügen möchten, ist dies etwas hässlicher.
Aus der views_embed_view()
Dokumentation:
Beachten Sie, dass diese Funktion den Titel der Ansicht NICHT anzeigt. Wenn Sie das tun möchten, müssen Sie das, was diese Funktion tut, manuell tun, indem Sie die Ansicht laden, die Vorschau abrufen und dann abrufen
$view->get_title()
.
Beispielsweise:
$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();
Aktualisiert : @rojosnow hat bemerkt, dass in den Dokumenten darauf hingewiesen wird, dass Sie die Vorschau erhalten müssen, bevor Sie anrufen. get_title()
Ich habe also diese beiden Zeilen vertauscht .
Das hat bei mir funktioniert:
$view = views_get_view('view_machine_name');
$view->set_display('Master');
$view->get_title();
$response = $view->preview('You_Block_id');
// und nannte es in HTML wie folgt //
<div class="col-md-4 col-sm-6">
<div class="blocksOuterWrapper companyNewsWrapper">
'.$response.'
</div>
</div>
Beachten Sie, dass für mich der Standardblock (ohne Namen) aufgerufen wird block
und nicht block_1
:
<?php echo views_embed_view('news_archive', 'block'); ?>
Auch auf tostinnis Antwort aufbauend:
Wenn Sie nicht möchten, dass HTML-Code angezeigt wird, wenn die Ansicht keine Ergebnisse liefert. Fügen Sie auch einen Titel hinzu, aber nur, wenn Ergebnisse vorliegen.
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');
}
Aus eigener Erfahrung können Sie einen Pfad zu einem Ansichtstitel oder -inhalt mit einer Funktion wie der folgenden umwandeln.
<?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;
}
Verwenden Sie zum Rendern der Ansicht $view->render()
anstelle von $view->get_title()
.
Sicher, bis ich das richtig angerufen habe $view->execute()
, hat nichts richtig funktioniert. Ich würde leere Zeichenfolgen (möglicherweise null) als Rückgabewerte erhalten.